OSのネットワーク設定情報の取得

お決まりの,「できるか?できないか?」検討で必要になったので調べた,IPアドレスやネットワークインタフェース名など,ネットワーク設定情報の取得について.
やるやらないを調べるのはいいんだけど,おかげさまでここんとこ本実装がちっとも進んでない….

Win32_NetworkAdapterConfigurationからネットワーク設定情報を取得

OSのネットワーク設定情報からIPアドレスMACアドレス,ネットワークインタフェース名などを引くことができる.
まず最初に,System.Managementを参照に追加しておく.
やりかた(VisualStudio)は,「プロジェクト」メニュー→「参照の追加」→「.NET」タブ(最初のタブ)のコンポーネント名一覧から「System.Management」を選択して「OK」

で,冒頭に

using System.Management;

を追加しとく.

サンプルコードは以下の通り.


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

    ManagementScope scope = new ManagementScope("root\\cimv2");
try
{
scope.Connect();
ObjectQuery query
= new ObjectQuery(QuerySQLTextBox.Text);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject managementObject in collection)
{
Console.WriteLine(((string[])managementObject.Properties["IPAddress"].Value)[0]);//IP
Console.WriteLine(managementObject["MACAddress"].ToString());//MACアドレス
Console.WriteLine(managementObject["Description"].ToString());//ネットワークインタフェース
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

内部的にはSQL問い合わせになってる.取得できるManagementObjectのプロパティ一覧は,http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_networkadapterconfiguration.asp

でもってこれでやるとネットワークインタフェース名のところが,

Broadcom NetXtreme Gigabit Ethernet - パケット スケジューラ ミニポート

みたいな感じで,「-」以後に余計な説明が入る.
13行目で指定している,プロパティ名をDescriptionではなく,Captionに変えて


13

          Console.WriteLine(managementObject["Caption"].ToString());//ネットワークインタフェース
としてみたら,今度は,

[00000008] Broadcom NetXtreme Gigabit Ethernet

みたいな感じで,こっちでも余計なものが入る.
実際に表示するときなどはこのあたりを切り落とすしかないのかな?

自ホスト名からIPアドレスを知る方法

IPアドレスだけ知りたいなら,もうちっと簡単な方法がある.
ただ,自ホスト名からIPアドレスを引くだけなので,これだけで信用していいものやら,という感じはある.

string hostname = Dns.GetHostName();

foreach (IPAddress ipAddress in Dns.GetHostAddresses(hostname))
{
msg += "\n" + ipAddress.ToString();
}
Console.WriteLine("IP : " + msg);