[转]C#遍历局域网的几种方法及比较

本文介绍并对比了三种使用C#实现的局域网扫描方法:利用ActiveDirectory遍历、通过Dns获取主机信息及使用Ping组件扫描。实验结果显示,Ping方法速度最快且效率最高。

http://blog.163.com/ldy_3881685/blog/static/32380136200954112940184/

C#遍历局域网的几种方法及比较  

2009-06-04 11:29:40|  分类: C#学习相关 |  标签: |字号 订阅

 
 

扫描局域网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,则有个别计算机的名称会因超时而获得不到。

转载于:https://www.cnblogs.com/Z-Fire/articles/2879707.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值