2010-03-29 18 views
1

想知道实际检索IP类型的c#代码:基于我将输入的设备列表的静态或DHCP。要查看C#轮询多个设备以确定IP类型:静态或DHCP

输出:

 
Device name: IP Address: MAC Address:   Type: 
Marvell Yukon 88E8001/8003/8010 PCI Gigabit Ethernet Controller NULL 00:00:F3:44:C6:00 DHCP 
Generic Marvell Yukon 88E8056 based Ethernet Controller 192.168.1.102 00:00:F3:44:D0:00 DHCP 
  ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
     ManagementObjectCollection objMOC = objMC.GetInstances(); 

     txtLaunch.Text = ("Name\tIP Address\tMAC Address\tType" +"\r\n"); 

     foreach (ManagementObject objMO in objMOC) 
     { 
      StringBuilder builder = new StringBuilder(); 

      object o = objMO.GetPropertyValue("IPAddress"); 
      object m = objMO.GetPropertyValue("MACAddress"); 

      if (o != null || m != null) 
      { 
       builder.Append(objMO["Description"].ToString()); 
       builder.Append("\t"); 
        if (o != null) 
         builder.Append(((string[])(objMO["IPAddress"]))[0].ToString()); 
        else 
         builder.Append("NULL"); 
       builder.Append("\t"); 
       builder.Append(m.ToString()); 
       builder.Append("\t"); 
       builder.Append(Convert.ToBoolean(objMO["DHCPEnabled"]) ? "DHCP" : "Static"); 
       builder.Append("\r\n"); 
      } 

      txtLaunch.Text = txtLaunch.Text + (builder.ToString()); 

这给了我90%的什么,我期待实现 - 代码都很顺利。下一部分是指定网络上的设备以远程获取信息。我注意到下面的一条评论指出,没有WMI,这是不可能的。这当然比我更接近。我相信这可以实现。我接受这里的建议。

回答

2

编辑:对不起,某些属性可能在某些适配器上为NULL。已修复以下问题

ManagementClass objMC = new ManagementClass(
         "Win32_NetworkAdapterConfiguration"); 
ManagementObjectCollection objMOC = objMC.GetInstances(); 

Console.WriteLine("Name\tIP Address\tMAC Address\tType"); 

foreach (ManagementObject objMO in objMOC) 
{ 

    StringBuilder builder = new StringBuilder(); 

    builder.Append(objMO["Description"].ToString()); 
    builder.Append("\t"); 
    object o = objMO.GetPropertyValue("IPAddress"); 

    if (o != null) 
     builder.Append(((string[])(objMO["IPAddress"]))[0].ToString()); 
    else 
     builder.Append("NULL"); 

    builder.Append("\t"); 

    object m = objMO.GetPropertyValue("MACAddress"); 

    if (m != null) 
     builder.Append(m.ToString()); 
    else 
     builder.Append("NULL"); 

    builder.Append("\t"); 
    builder.Append(Convert.ToBoolean(objMO["DHCPEnabled"]) ? "DHCP" : "Static"); 
    Console.WriteLine(builder.ToString()); 
} 
+0

您是否建议如何轮询网络上的其他设备? – 2010-03-30 19:02:57

0

如果你想为远程主机做到这一点,你就无法做到这一点。您需要访问DHCP服务器及其日志记录以识别此信息。

编辑:当然,通过WMI的作品,如果可用。