1

入力するデバイスのリストに基づいて、静的または DHCP という IP タイプを実際に取得するための C# コードを知りたいです。

表示される出力:

デバイス名: IP アドレス: MAC アドレス: タイプ:  
Marvell Yukon 88E8001/8003/8010 PCI ギガビット イーサネット コントローラ NULL 00:00:F3:44:C6:00 DHCP
一般的な Marvell Yukon 88E8056 ベースのイーサネット コントローラ 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% が得られました。コードはうまく機能しました。次の部分は、情報をリモートで取得するためにネットワーク上のデバイスを指定することです。以下の 1 つのコメントに、WMI なしではこれは不可能であると書かれていることに気付きました。これは確かに私よりもはるかに近いです。これは実現できると確信しています。ここで推奨事項を受け入れます。

4

3 に答える 3

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());
}
于 2010-03-29T19:02:24.737 に答える
0

リモートホストに対してこれを実行しようとしている場合、これを実行することはできません。この情報を識別するには、DHCPサーバーとそのログにアクセスする必要があります。

編集:もちろん、利用可能な場合はWMIを介して機能します。

于 2010-03-29T19:01:11.007 に答える
0

http://www.codeguru.com/csharp/csharp/cs_network/internetweb/article.php/c6023/ を見てください。

于 2010-03-29T18:52:31.460 に答える