0
点赞
收藏
分享

微信扫一扫

C#GJBC-31.4.2 IP地址和DNS名称


 


31.4.2  IP地址和DNS名称


在Internet上,服务器和客户机都由IP地址或主机名(也称作DNS名称)标识。通常,主机名是在Web浏览器的窗口中键入的友好名称,例如www.wrox.com或www.microsoft.com等。另一方面,IP地址是计算机用于互相标识的标识符,它实际上是用于确保Web请求和响应到达相应机器的地址。计算机甚至可以有多个IP地址。


为了使这些主机名发挥作用,首先必须发送一个网络请求,把主机名翻译成IP地址,翻译工作由一个或几个DNS服务器完成。


DNS服务器中保存的一个表把主机名映射为它知道的所有计算机的IP地址,以及用于其他DNS服务器在该表中查找它不知道的主机名的其他IP地址。本地计算机至少要知道一个DNS服务器。网络管理员在计算机启动时配置该信息。


在发送请求之前,计算机首先应要求DNS服务器指出与键入的主机名相对应的IP地址。找到正确的IP地址后,计算机就可以定位请求,并通过网络发送它。这些工作一般都在后台发生,用户仅浏览Web即可。


1. 用于IP地址的.NET类


.NET Framework提供了许多能够帮助寻找IP地址和主机信息的类。


(1) IPAddress类


IPAddress类代表IP地址。地址本身可以作为Address属性,使用ToString()方法可以把IP地址转化为用小数点隔开的十进制格式。此外,IPAddress也执行静态的Parse()方法,这个方法的作用与ToString()方法正好相反,把小数点隔开的十进制字符串转化为IP地址。


IPAddress ipAddress = IPAddress.Parse("234.56.78.9");


long address = ipAddress.Address;   


string ipString = ipAddress.ToString();  


在上面的示例中,long整型数address的值为156121322,字符串ipString的值为文本“234.56.78.9”。


IPAddress还提供了许多静态的常量字段,以返回特殊的IP地址。例如,Loopback地址允许机器给它自己发送消息,而Broadcast允许多路传送到本地网络上。


// The following line will set loopback to "127.0.0.1".


// the loopback address indicates the local host.


string loopback = IPAddress.Loopback.ToString();


 


// The following line will set broadcast address to "255.255.255.255".


// the broadcast address is used to send a message to all machines on


// the local network.


string broadcast = IPAddress.Broadcast.ToString();


(2) IPHostEntry类


IPHostEntry类用于封装与某台主机相关的信息。通过这个类的HostName属性(这个属性返回一个字符串),可以使用主机名称;通过AddressList属性返回一个IPAddress对象的数组。下一个示例DNSResolver将使用IPHostEntry类。


(3) Dns类


Dns类能够与默认的DNS服务器进行通信,以检索IP地址。Dns类有两个重要的静态方法:Resolve()方法和GetHostByAddress()方法。通过给Resolve()方法提供主机名称,Resolve()可以使用DNS服务器获取主机的详细信息;通过给GetHostByAddress()方法提供IP地址,GetHostByAddress()也可以返回主机的详细信息。这两个方法都返回一个IPHostEntry对象。


IPHostEntry wroxHost = Dns.Resolve("www.wrox.com");


IPHostEntry wroxHostCopy = Dns.GetHostByAddress("168.215.86.81");


在这段代码中,两个HostEntry对象将包含Wrox.com服务器的详细信息。


Dns类与IPAddress类和IPHostEntry类的不同之处在于:Dns可以与服务器进行通信,以获取有关的信息;而IPAddress类和IPHostEntry类只是包含许多便利属性的简单数据结构,可以访问底层的数据。


2. DnsLookup示例


下面通过查找DNS名称的示例,来阐明DNS和与IP相关的类。屏幕图31-7显示的是DnsLookup示例运行的情况。




图  31-7


该示例让用户在主文本框中键入DNS名称,然后,当用户单击Resolve按钮时,这个示例就使用Dns.Resolve()方法检索IPHostEntry引用,显示出主机名和IP地址。注意,显示出的主机名也许与键入的名称不同,如果一个DNS名称(www.microsoft.com)仅担当另一个DNS名称(a562.cd.akamai.net)的代理人,就会发生这种情况。


DnsLookup应用程序是一个标准的C# Windows应用程序,给这个应用程序添加如图31-7中的控件,这些控件分别命名为textBoxInput、buttonResolve、textBoxHost Name和listboxIPs。然后,把下面的方法添加给Form1类,作为buttonResolve单击事件的处理程序。


void btnResolve_Click (object sender, EventArgs e)



{



try



{



IPHostEntry iphost = Dns.Resolve(txtBoxInput.Text);



foreach (IPAddress ip in iphost.AddressList)



{



string ipaddress = ip.AddressFamily.ToString();



listBoxIPs.Items.Add(ipaddress);



listBoxIPs.Items.Add(" " + ip.ToString());



}



txtBoxHostName.Text = iphost.HostName;



}



catch(Exception ex)



{



MessageBox.Show("Unable to process the request because " +



"the following problem occurred:/n" +



ex.Message, "Exception occurred");



}



}


注意,在这段代码中是如何处理异常的。如果用户键入了无效的DNS名称,或者网络处于断开状态,就会产生异常。


在检索到IPHostEntry实例之后,使用它的AddressList属性获取包含IP地址的数组,再用foreach循环遍历该数组。在每次迭代中,都使用IPAddress.AddressFamily.ToString()方法把IP地址显示为整数和字符串。


 

举报

相关推荐

0 条评论