.Net中扫描局域网IP列表的几种方法

很多软件都有获知局域网在线计算机IP的功能,但是在.net怎么实现呢,有好多方法,
下面我给大家介绍几种,供大家参考。

1、微软社区上介绍了使用Active Directory 来遍历局域网
利用DirectoryEntry组件来查看网络
网址:http://www.microsoft.com/china/community/program/originalarticles/techdoc/DirectoryEntry.mspx

private   void  EnumComputers()
  {
    
using (DirectoryEntry root  =   new  DirectoryEntry( " WinNT: " ))
    {
      
foreach (DirectoryEntry domain  in  root.Children)
      {
        Console.WriteLine(
" Domain | WorkGroup: " + domain.Name);
        
foreach (DirectoryEntry computer  in  domain.Children)
    {
     Console.WriteLine(
" Computer: " + computer.Name);
    }
   }
  }
 }

 

效果评价:速度慢,效率低,还有一个无效结果 Computer: Schema 使用的过程中注意虑掉。

2、利用Dns.GetHostByAddress和IPHostEntry遍历局域网

 

private   void  EnumComputers()
{
 
for  ( int  i  =   1 ; i  <=   255 ; i ++ )
 {
  
string  scanIP  =   " 192.168.0. "   +  i.ToString();

  IPAddress myScanIP 
=  IPAddress.Parse(scanIP);

  IPHostEntry myScanHost 
=   null ;

  
try
  {
    myScanHost 
=  Dns.GetHostByAddress(myScanIP);
  }

  
catch
  {
    
continue ;
  }

  
if  (myScanHost  !=   null )
  {
    Console.WriteLine(scanIP
+ " | " + myScanHost.HostName);
  }
  } 
}


效果评价:效率低,速度慢,不是一般的慢。

3、使用System.Net.NetworkInformation.Ping来遍历局域网

 

private   void  EnumComputers()
{
 
try
 {
   
for  ( int  i  =   1 ; i  <=   255 ; i ++ )
   {
     Ping myPing;
     myPing 
=   new  Ping();
     myPing.PingCompleted 
+=   new  PingCompletedEventHandler(_myPing_PingCompleted);

     
string  pingIP  =   " 192.168.0. "   +  i.ToString();
     myPing.SendAsync(pingIP, 
1000 null );
   }
 }
 
catch
 {
 }
}

PRIVATE 
void  _myPing_PingCompleted( object  sender, PingCompletedEventArgs e)
{
  
if  (e.Reply.Status  ==  IPStatus.Success)
  {
    Console.WriteLine(e.Reply.Address.ToString() 
+   " | "   +  Dns.GetHostByAddress(IPAddress.Parse(e.Reply.Address.ToString())).HostName);
  }

}


效果评价:速度快,效率高,如果只取在线的IP,不取计算机名,速度会更快。
需要注意的是取计算机名称如果用Dns.GetHostByAddress取计算机名称,结果虽然正确,但VS2005会提示该方法已过时,但仍能使用。
如果用它推荐的替代方法Dns.GetHostEntry,则有个别计算机的名称会因超时而获得不到。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值