2010-03-29 20 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的作品,如果可用。