SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

ネットワークアダプタの情報 ipcnfig /all (C#)(F#)


WMIのWin32_NetworkAdapterConfigurationによって、ipconfig /allで取得するようなネットワークアダプタの情報を取得する事ができます。
※WMIを使用するには、参照設定で「System.Management」を追加する必要があります。

C#サンプル

using System;
using System.Management;

namespace Example {
    class Program {
        static void Main(string[] args) {
            var ms = new ManagementObjectSearcher("select * from Win32_NetworkAdapterConfiguration");
            foreach (var m in ms.Get()) {
                Console.WriteLine("");
                DispString("説明", m["Description"]);
                DispStringArray("アドレス", m["IPAddress"]);
                DispStringArray("サブネット マスク", m["IPSubnet"]);
                DispStringArray("デフォルトゲートウエイ", m["DefaultIPGateway"]);
                DispString("物理アドレス", m["MACAddress"]);
                DispDateTime("リース取得", m["DHCPLeaseObtained"]);
                DispDateTime("リースの有効期限", m["DHCPLeaseExpires"]);
                DispString("DHCPサーバ", m["DHCPServer"]);
                DispString("ホスト名", m["DNSHostName"]);
                DispStringArray("DNSサーバt{0}", m["DNSServerSearchOrder"]);
                DispString("DHCP有効", m["DHCPEnabled"]);
                DispString("TCPウインドサイズ", m["TcpWindowSize"]);
                DispString("プライマリWINSサーバーのIPアドレス", m["WINSPrimaryServer"]);
                DispString("WINSEnableLMHostsLookup", m["WINSEnableLMHostsLookup"]);
                DispString("サービス名", m["ServiceName"]);
                DispString("SettingID", m["SettingID"]);
            }
            Console.WriteLine();
            Console.WriteLine("何かのキーを押してください。");
            Console.ReadKey();
        }
        static void DispString(string title, object o) {
            if (o != null) {
                Console.WriteLine("{0}t{1}", title, o);
            }
        }
        static void DispStringArray(string title, object o) {
            if (o != null) {
                Console.WriteLine(title);
                foreach (var s in (string[])o) {
                    Console.WriteLine("t{0}", s);
                }
            }
        }
        static void DispDateTime(string title, object o) {
            if (o != null) {
                var s = (string)o;
                var year = s.Substring(0, 4);
                var month = s.Substring(4, 2);
                var day = s.Substring(6, 2);
                var hour = s.Substring(8, 2);
                var min = s.Substring(10, 2);
                var sec = s.Substring(12, 2);
                Console.WriteLine("{0}t{1}/{2}/{3} {4}:{5}:{6}", title, year, month, day, hour, min, sec);
            }
        }
    }
}

F#サンプル

open System
open System.Management
open System.Linq

let DispString(title,o:obj) =
    if o <> null then
        printfn "%st%s" title (o.ToString())

let DispStringArray(title,o:obj)= 
    if o <> null then
        printfn "%s" title
        for s in o:?>string[] do
            printfn "t%s" s
    
let DispDateTime(title,o:obj) =
    if o <> null then
        let s = o:?>string
        let year = s.Substring(0, 4)
        let month = s.Substring(4, 2)
        let day = s.Substring(6, 2)
        let hour = s.Substring(8, 2)
        let min = s.Substring(10, 2)
        let sec = s.Substring(12, 2)
        printfn "%st%s/%s/%s %s:%s:%s" title year month day hour min sec

let ms = new ManagementObjectSearcher("select * from Win32_NetworkAdapterConfiguration")
ms.Get().Cast<ManagementObject>()
|>Seq.iter(fun m->
    DispString("説明",m.["Description"])
    DispStringArray("アドレス",m.["IPAddress"])
    DispStringArray("サブネット マスク",m.["IPSubnet"])
    DispStringArray("デフォルトゲートウエイ", m.["DefaultIPGateway"])
    DispString("物理アドレス", m.["MACAddress"])
    DispDateTime("リース取得", m.["DHCPLeaseObtained"])
    DispDateTime("リースの有効期限", m.["DHCPLeaseExpires"])
    DispString("DHCPサーバ", m.["DHCPServer"])
    DispString("ホスト名", m.["DNSHostName"])
    DispStringArray("DNSサーバt{0}", m.["DNSServerSearchOrder"])
    DispString("DHCP有効", m.["DHCPEnabled"])
    DispString("TCPウインドサイズ", m.["TcpWindowSize"])
    DispString("プライマリWINSサーバーのIPアドレス", m.["WINSPrimaryServer"])
    DispString("WINSEnableLMHostsLookup", m.["WINSEnableLMHostsLookup"])
    DispString("サービス名", m.["ServiceName"])
    DispString("SettingID", m.["SettingID"]))

printfn "何かのキーを押してください。"
Console.ReadKey() |> ignore