C # Опрос нескольких устройств, чтобы определить тип IP: статический или DHCP - PullRequest
1 голос
/ 29 марта 2010

Хотелось бы знать код 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. Это, конечно, намного ближе, чем я был. Я убежден, что это может быть достигнуто. Я открыт для рекомендаций здесь.

Ответы [ 3 ]

2 голосов
/ 29 марта 2010

РЕДАКТИРОВАТЬ: извините, некоторые свойства могут быть 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 голосов
/ 29 марта 2010

Если вы пытаетесь сделать это для удаленных хостов, вы не сможете этого сделать. Вам потребуется доступ к DHCP-серверу и его журналированию, чтобы идентифицировать эту информацию.

Редактировать: конечно, через WMI работает, если доступно.

0 голосов
/ 29 марта 2010

Посмотрите на http://www.codeguru.com/csharp/csharp/cs_network/internetweb/article.php/c6023/ надеюсь, это поможет

...