文章收藏-FAQ 位置:电脑学习网

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

     [文章来源:“十万个为什么”电脑学习网]
     [网络地址:http://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822