局域网中根据IP地址反查主机的名称(C#)

你遇到过这种情况吗?你的防火墙报告局域网中的某个IP地址的电脑正在攻击你,但是防火墙却没有提示发出攻击的电脑名称,到底谁的电脑在攻击呢(攻击你的电脑可能是中毒了)?有一天早上你刚刚上班,打开电脑后发现连接不了服务器,到服务器那里一看才知道,原来有人使用了服务器的IP地址,到底谁在使用服务器的IP地址呢? nslookup 可以实现域名(主机名)的反查IP地址。哈哈,但今天说的是用C#实现。

1. 根据IP地址获得主机名称
         ///   <summary>
        
///  根据IP地址获得主机名称
        
///   </summary>
        
///   <param name="ip"> 主机的IP地址 </param>
        
///   <returns> 主机名称 </returns>
         public   string  GetHostNameByIp( string  ip)
        {
            ip 
=  ip.Trim();
            
if  (ip  ==   string .Empty)
                
return   string .Empty;
            
try
            {
                
//  是否 Ping 的通
                 if  ( this .Ping(ip))
                {
                    System.Net.IPHostEntry host 
=  System.Net.Dns.GetHostEntry(ip);
                    
return  host.HostName;
                }
                
else
                    
return   string .Empty;
            }
            
catch  (Exception)
            {
                
return   string .Empty;
            }
        }

说明:如果你的电脑可以上网你甚至可以查询到:IP地址“ 64.233.189.104”是 Google 的一个名为“ hk-in-f104.google.com”的主机的IP地址。



关于代码中 this.Ping(ip) 方法后面再说。
既然说了如何“根据IP地址获得主机名称”,那就要再说说如何“根据主机名获得主机的IP地址”吧。

2. 根据主机名获得主机的IP地址
         ///   <summary>
        
///  根据主机名(域名)获得主机的IP地址
        
///   </summary>
        
///   <param name="hostName"> 主机名或域名 </param>
        
///   <example> GetIPByDomain("pc001"); GetIPByDomain("www.google.com"); </example>
        
///   <returns> 主机的IP地址 </returns>
         public   string  GetIpByHostName( string  hostName)
        {
            hostName 
=  hostName.Trim();
            
if  (hostName  ==   string .Empty)
                
return   string .Empty;
            
try
            {
                System.Net.IPHostEntry host 
=  System.Net.Dns.GetHostEntry(hostName);
                
return  host.AddressList.GetValue( 0 ).ToString();
            }
            
catch  (Exception)
            {
                
return   string .Empty;
            }
        }

说明:如果你的电脑可以上网你甚至可以查询到:“ www.google.com”的IP地址是“ 64.233.189.104”。



最后,再说说C#实现简单的 Ping 的功能,用于测试网络是否已经联通。

3. C#实现简单的 Ping 的功能,用于测试网络是否已经联通
         ///   <summary>
        
///  是否能 Ping 通指定的主机
        
///   </summary>
        
///   <param name="ip"> ip 地址或主机名或域名 </param>
        
///   <returns> true 通,false 不通 </returns>
         public   bool  Ping( string  ip)
        {
            System.Net.NetworkInformation.Ping p 
=   new  System.Net.NetworkInformation.Ping();
            System.Net.NetworkInformation.PingOptions options 
=   new  System.Net.NetworkInformation.PingOptions();
            options.DontFragment 
=   true ;
            
string  data  =   " Test Data! " ;
            
byte [] buffer  =  Encoding.ASCII.GetBytes(data);
            
int  timeout  =   1000 //  Timeout 时间,单位:毫秒
            System.Net.NetworkInformation.PingReply reply  =  p.Send(ip, timeout, buffer, options);
            
if  (reply.Status  ==  System.Net.NetworkInformation.IPStatus.Success)
                
return   true ;
            
else
                
return   false ;
        }

本文地址: http://www.cnblogs.com/anjou/archive/2007/10/11/920214.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值