代码改变世界

用C#获取局域网内所有机器

2010-09-30 11:03  ※森林小居※  阅读(858)  评论(0编辑  收藏  举报

原理其实很简单,在cmd.exe下面ping一下几台机,然后用arp -a命令查看一下,这种方式比开多线程去循环扫描的方式来的简单而有效。

  //首先来个循环ping一下那个网段的主机。

  //其次用以下的函数去获取所有的局域网内有响应的ip地址列表

 


 public static ArrayList GetAllLocalMachines()
  {
  Process p = new Process();
  p.StartInfo.FileName = "cmd.exe";
  p.StartInfo.UseShellExecute = false;
  p.StartInfo.RedirectStandardInput = true;
  p.StartInfo.RedirectStandardOutput = true;
  p.StartInfo.RedirectStandardError = true;
  p.StartInfo.CreateNoWindow = true;
  p.Start(); p.StandardInput.WriteLine("arp -a");
  p.StandardInput.WriteLine("exit");
  ArrayList list = new ArrayList();
  StreamReader reader = p.StandardOutput;
  string IPHead = Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString().Substring(0, 3);
  for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
  {
  line = line.Trim(); if (line.StartsWith(IPHead) && (line.IndexOf("dynamic") != -1))
  {
  string IP = line.Substring(0, 15).Trim(); string Mac = line.Substring(line.IndexOf("-") - 2, 0x11).Trim();
  LocalMachine localMachine = new LocalMachine();
  localMachine.MachineIP = IP;
  localMachine.MachineMAC = Mac;
  localMachine.MachineName = "";
  list.Add(localMachine);
  }
  }
  return list;
  }