IP地址转换与域名解析

    • IP地址与端口
    • IP地址转换相关类
    • 域名解析
    • 代码分析
  • *特别注意*:

IP地址转换与域名解析相关的类都在System.Net命名空间下

IP地址与端口

1.在网络上,识别远程主机的信息主要由两部分组成:
①主机标识:识别与本地计算机通信的是哪台远程主机;
②端口号:识别和远程主机的哪个进程通信。
2.IP地址:在因特网中,每台联网的主机都在全世界范围内唯一的标识。
3.端口:IP地址仅仅能够识别到某台主机,而不能识别该主机上的进程;端口(port)
识别是哪个进程。(一)IP地址(1)
1.一个IP地址主要由两部分组成:
(1)网络号:识别该地址所属的网络,它由Internet权利机构分配。
(2)主机号:指明网络内的主机,它由各个网络的管理员统一分配。
2.IPv4编址方案
^由4个字节(十进制表示)组成的二进制值进行识别,中间用圆点分开,这种方法叫做点分十进制 表示法。
^例如:192.168.1.1   127.0.0.1
3.IPv6编址方案
^每个IP地址有16个字节(128位二进制数),其完整格式用8段16进制表示,各段之间用
冒号分隔。多个连续的0可以用::表示。
^例如:0:0:0:0:0:0:0:1   可以简写为::1
(一)IP地址(2)
1.子网掩码:子网掩码用于屏蔽IP地址的一部分以区别网络标识和主机标识。
2.子网掩码把所有的网络位(二进制)用1来标识,主机位用0来标识。
^例如:如果将子网掩码设置为255.255.255.0,则对于IP地址192.168.1.X,其网络标识
部分为192.168.1;主机标识为:X。
3.可以利用子网掩码判断两台计算机是否在同一子网内。(具体操作:将其IP地址和子网
掩码做按位与运算,如果得到结果相同即在同一个子网内。)
(二)端口
1.端口有两种含义:
①物理意义上的端口,如ADSL Modem、集线器的接口;
②逻辑意义上的端口,即进程标识,端口号的范围从0到65535,比如用于HTTP的80端口,
用于FTP的21端口等。
2.在网络编程研究中的端口均值逻辑意义上的端口。
^端口是为了解决与多个进程同时进行通信问题。
3.可用端口地址的范围是十进制的0~65535。
^端口地址用两字节二进制数来表示;
^1000以内的端口号大多被标准协议所占用;
^应用程序中可以自由使用的端口号一般都使用大于1000的值。

IP地址转换相关类

复杂的网络应用程序中,需要掌握几个最基本的类:
①提供网际协议IP地址的IPAddress类;
②包含IP地址和端口号的IPEndPoint类;
③为Internet或Intranet主机提供信息容器的IPHostEntry类。
1.IPAddress类(1/2)
^IPAddress位于System.Net命名空间下,提供了对IP地址的转换和处理功能。
^常用方法:Parse方法将IP地址字符串转换为IPAddress的实例。例如:

Try
{IPAddress ip = IPAddress.Parse("143.24.20.36");
}
Catch
{MessageBox.Show("请输入正确的IP地址!");
}

IPAddress类(2/2)
^利用该实例的AddressFamily属性可判断该IP地址是IPv6还是IPv4。

IPAddress ip = IPAddress.Parse("::1");
if (ip.AddressFamily == AddressFamily.InterNetworkV6)
{MessageBox.Show("这是IPv6地址");
}IPAddress类还提供了7个只读字段,分别代表程序中使用的特殊IP地址。

IPAddress类常见只读字段

2.IPEndPoint类
^IPEndPoint描述应用程序连接到主机上的服务所需的主机和端口信息。
^IPEndPoint类的常用构造函数为:

public IPEndPoint(IPAddress address, int port);
第一个参数指定IP地址,第二个参数指定端口号。例如:
IPAddress localAddress = IPAddress.Parse("192.168.1.1");
IPEndPoint iep = new IPEndPoint(localAddress, 65000);
string s1 = "IP地址为:" + iep.Address;
string s2 = "IP端口为:" + iep.Port;

3.IPHostEntry类
^IPHostEntry类将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类一般和Dns类一起使用。
^常用属性
AddressList属性
获取或设置与主机关联的IP地址列表(包括IPv4和IPv6)
^HostName属性
包含了指定主机的主机名
Dns类的静态方法GetHostEntry()能够获得IPHostEntry对象。
例如:

IPAddress[] ips = Dns.GetHostEntry(“news.sohu.com”).AddressList;

域名解析



网络主机是使用IP地址来定位的
域名比纯数字的IP地址更容易记忆
IP地址改变后,域名不变,仍可访问。
DNS(Domain Name System)完成域名到IP的转换

DNS的解析过程:
^DNS是一种典型的C/S结构。
^由Client向指定的DNS Server发出DNS请求报文,Server收到该请求报文之后,会回给
Client一个应答报文,满足Client的域名解析要求。

Dns类常用方法

(1)GetHostAddresses方法

^利用GetHostAddresses方法可以获取指定主机的IP地址,该方法返回一个IPAddress类型
的数组。
^方法原型为:
public static IPAddress[] GetHostAddresses(string hostNameOrAddress);
参数中的hostNameOrAddress表示要解析的主机名或IP地址。
例如:
IPAddress[] ips = Dns.GetHostAddresses("www.cctv.com");^若hostNameOrAddress是IP地址,则直接返回此地址;若hostNameOrAddress是空字符
串,则返回本机所有IPv4和IPv6地址。例如:
IPAddress[] ips = Dns.GetHostAddresses(""); //获取本机的所有IP地址

(2)GetHostEntry方法

^GetHostEntry方法可返回一个IPHostEntry实例,用于在DNS服务器中查询与某个主机名
或IP地址关联的IP地址列表。
^方法原型为
public static IPHostEntry GetHostEntry (string hostNameOrAddress)
参数中的hostNameOrAddress表示要解析的主机名或IP地址。
^当参数为空字符串时,返回本地主机的IPHostEntry实例。
例如:
IPHostEntry host = Dns.GetHostEntry("");
var ipAddresses = host.AddressList;  //获取本机所有IP地址
string name = host.HostName;        //获取本机主机名

(3)GetHostName方法

该方法用于获取本机主机名。
例如:
string hostname = Dns.GetHostName( );

代码分析

(1)
StringBuilder sb = new StringBuilder();
sb.AppendLine("获取www.cctv.com的所有IP地址:");
try  {IPAddress[] ips = Dns.GetHostAddresses("www.cctv.com");foreach (IPAddress ip in ips){  sb.AppendLine(ip.ToString());  }}catch (Exception ex){   MessageBox.Show(ex.Message,"获取失败");    }
(2)
string hostName = Dns.GetHostName();
sb.AppendLine("获取本机所有IP地址:");IPHostEntry me = Dns.GetHostEntry(hostName);foreach (IPAddress ip in me.AddressList){ if (ip.AddressFamily == AddressFamily.InterNetwork){   sb.AppendLine("IPv4:" + ip.ToString());   }else if (ip.AddressFamily == ddressFamily.InterNetworkV6){  sb.AppendLine("IPv6:" + ip.ToString());    }else   {    sb.AppendLine("其他:" + ip.ToString());  }}
(3)
IPAddress localip = IPAddress.Parse("::1"); //IPv6回路测试地址Output(sb, localip);IPAddress localip1 = IPAddress.Parse("127.0.0.1");//IPv4回路测试地址Output(sb, localip1);textBlock1.Text = sb.ToString();}
(4)
private static void Output(StringBuilder sb, IPAddress localip){ IPEndPoint iep = new IPEndPoint(localip, 80);if (localip.AddressFamily == AddressFamily.InterNetworkV6){ sb.Append("IPv6端点: " + iep.ToString());  }else {sb.Append("IPv4端点: " + iep.ToString());  }sb.Append(",端口 " + iep.Port);sb.Append(",地址 " + iep.Address);sb.AppendLine(",地址族 " + iep.AddressFamily);}

特别注意

仅供参考学习,转载请附上原文链接
图片来源于网络、个人收藏、个人制作
该篇文章不做任何商业用途,纯属分享学习心得,如有侵权,望联系本人处理
还在读大学的程序员,项目经验少,如有纰漏,感谢指正
需要源代码请私聊联系本人
谢谢配合

如果这篇文章对您有帮助,小小的点个赞,算是给小学弟的鼓励吧!谢谢大佬!!/呱呱.jpg

IP地址转换与域名解析相关推荐

  1. 实验:IP地址转换(超好用的substr();)

    首先介绍c++中超好用的截取部分字符串的函数substr(); 头文件为#include<string> 函数原型: string substr(int pos = 0,int n ) c ...

  2. 快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码

    题目描述 原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成 一个长整数. 举例:一个ip地址为10.0.3.193 每段数字       ...

  3. python整数与IP地址转换

    我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import socket >>> ...

  4. 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

     1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端 ...

  5. ip地址转换数字函数 iton_DataLakeAnalytics: 解析IP地址对应的国家城市的函数

    Data Lake Analytics 作为云上数据处理的枢纽,最近加入了通过IP地址查找对应的国家.省份.城市.ISP的函数, 今天带大家体验一下. 函数详细介绍 本次一共添加了下面这些函数: ip ...

  6. 【Linux网络编程学习】预备知识(网络字节序、IP地址转换函数、sockaddr数据结构)

    此为牛客Linux C++课程和黑马Linux系统编程笔记. 1. 网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分. 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小 ...

  7. linux的基础知识——网络字节序转化,ip地址转换函数,sockaddr数据结构

    1.网络字节序 TCP/IP协议规定,网络数据流采用大端字节序,即低地址高字节.为了使网络程序具有可移植性,使得同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机 ...

  8. Bailian4039 IP地址转换【进制】

    IP地址转换 总时间限制: 1000ms 内存限制: 65536kB 描述 IP地址总是由4个0-255的数字以"."隔开的形式来显示给用户,例如192.168.0.1.在计算机中 ...

  9. PTA IP地址转换

    7-4 IP地址转换 (20 分) 一个IP地址是用四个字节(每个字节8个位)的二进制码组成.请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出. 输入格式: 输入在一行中给出32位二 ...

  10. 第22节 NAT——实现公私有IP地址转换

    NAT 1 NAT概述 1.1 IP地址概述 1.2NAT概述 2 NAT分类 2.1 静态NAT 2.2 动态NAT 2.3 PAT 2.4 静态PAT 3 NAT命令 3.1 定义内外网接口 3. ...

最新文章

  1. Castle ActiveRecord学习实践(1):快速入门指南
  2. 助你解决新手开车四大问题 为您支招
  3. java基础(一)-面向对象思想
  4. jdk1.5的类转换成jdk1.4的类文件
  5. javascript窗口属性示意图
  6. 拉普拉斯方程(Laplace's equation)-- 更新中
  7. mcisendString制作播放器
  8. Android ViewBinding使用详解
  9. hdu5020 Revenge of Collinearity 求三点共线的点对个数
  10. 批量爬取链家房源信息
  11. 边缘计算卸载论文翻译于分析总结
  12. 文本检测 论文阅读笔记之 Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks
  13. 阿里云实人认证的功能及应用
  14. 神经胶质瘤是怎么引起的,胶质瘤和神经胶质瘤
  15. 【教学类-34-01】拼图(运动项目-长方块拼图)3*4格子(中班主题《个别化拼图》健康偏艺术-美术)
  16. 猫狗叫声模拟器小程序源码
  17. python自动生成字幕_深度学习实现自动生成图片字幕
  18. 深度学习时间序列预测项目案例数据集介绍
  19. linux下用chmod修改文件权限详解(文件权限与特殊权限)
  20. java sca_用于Java的SCA客户机和实现模型

热门文章

  1. 基于matlab的高等数学实验,《基于MATLAB高等数学实验》出版发行
  2. 中班音乐会跳舞的机器人_中班音乐律动机器人
  3. 常用大部分渗透工具下载
  4. Android 中文 API (29) —— CompoundButton
  5. asp.net中commandname应用
  6. 聊聊docker的使用心得
  7. dnf脚本是php,dnf脚本和辅助惩罚定制
  8. Python 的 setup.py 详解
  9. Linux基础——014_钩子程序同步代码
  10. 解决Linux QQ闪退和扫码无法登陆的方法