2008年1月25日金曜日

IPアドレスやMACアドレスを取得する(C#)

ネットワークを介したシステムを作る上で、マシンのIPアドレスやMACアドレスは
重要になってくる。

C#ではIPアドレスをはじめとして、様々なデバイス情報を取得することができます。

今回は、この取得をWindows Management Instrumentation (WMI)を
用いて行います。

WMIはWindows管理技術の中核を担っています。
また、ローカルのマシンだけでなく、リモートのマシンも管理することが可能です。

C#には、このWMIを表すクラス"ManagementObject"があります。

実際に使ってみてから説明していきます。


"コンソール アプリケーション"プロジェクトを作成して下さい。

"ManagementObject"は"System.ManagementObject"ライブラリ下に
あります。

メニューの[プロジェクト] → [.NET]タブ → "System.Management"を
クリックして、[OK]ボタンを押して下さい。

"using"ディレクティブを用いて、名前空間の修飾省略定義を行います。

/*** Program.cs ***/
using System.Management;
IPアドレスとMACアドレスを標準出力するソースを記述します。

/*** Program.cs ***/
static void Main(string[] args)
{
string query = "SELECT * FROM Win32_NetworkAdapterConfiguration";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);

ManagementObjectCollection queryCollection = searcher.Get();

foreach (ManagementObject mo in queryCollection)
{
if ((bool)mo["IPEnabled"])
{
Console.WriteLine(mo["Caption"]);
foreach (string ip in (string[])mo["IPAddress"])
{
Console.WriteLine("IP = " + ip);
}
Console.WriteLine("MAC = " + mo["MacAddress"].ToString() + "\n");
}
}

System.Threading.Thread.Sleep(5000);
}

実行します。















実際に"ネットワーク接続"画面を開いて確認してみます。














接続状態が"無効"もしくは"切断"の接続は、コンソールに表示されていません。

これは、"IPEnabled"がfalseになっているためです。

また、「ネットワークケーブルが接続されていません」と表示されている接続は、
IPアドレスが"0.0.0.0"と表示されています。

ちなみに、このネットワークは"OpenVPN"を使った仮想ネットワークです。

他のネットワークアダプタの状態や振る舞いを取得する場合は、
msdn : Win32_NetworkAdapterConfiguration Class」を
参照して下さい。


このようにWMIを用いることで、マシンの情報を容易に取得することができます。


参照:
Windows Management Instrumentation の秘密 : Microsoft TechNet
ManagementObject クラス (System.Management) : msdn
how do i get the MAC address in c# ? : C# Friends

0 件のコメント: