DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ネットワークインターフェイスの構成、統計情報を取得する

注意:ここで紹介している方法は、.NET Framework 2.0から追加されたNetworkInterfaceクラスを使用していますので、.NET Framework 2.0以降でのみ使用できます。

.NET Framework 2.0から追加されたNetworkInterfaceクラスを使用することにより、ネットワークインターフェイス(ネットワークカード、ネットワークアダプタ)の情報を取得することができます。NetworkInterface.GetAllNetworkInterfacesメソッドにより、コンピュータで使用可能なネットワークインターフェイスをNetworkInterfaceオブジェクトの配列で取得できますので、これを利用して、特定のネットワークインターフェイスを探して、情報を取得することができます。

また、NetworkInterfaceクラスのGetIPv4Statisticsメソッドにより、IPv4の統計情報を取得することができます。

以下に例を示します。ここでは、ネットワークと接続しているネットワークインターフェイスの情報のみを表示しています。なおここでは取得できる情報のすべては紹介していませんので、詳しくはヘルプ(NetworkInterfaceクラスIPInterfacePropertiesクラスIPv4InterfaceStatisticsクラス)をご覧ください。

VB.NET
コードを隠すコードを選択
'Imports System.Net.NetworkInformation
'がソースファイルの一番上に書かれているものとする

'すべてのネットワークインターフェイスを取得する
Dim nis As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
Dim ni As NetworkInterface
For Each ni In nis
    'ネットワーク接続しているか調べる
    If ni.OperationalStatus = OperationalStatus.Up AndAlso _
        ni.NetworkInterfaceType <> NetworkInterfaceType.Loopback AndAlso _
        ni.NetworkInterfaceType <> NetworkInterfaceType.Tunnel Then
        'ネットワークインターフェイスの情報を表示する
        Console.WriteLine("接続名:{0}", ni.Name)
        Console.WriteLine("説明:{0}", ni.Description)
        Console.WriteLine("種類:{0}", ni.NetworkInterfaceType)
        Console.WriteLine("速度:{0}", ni.Speed)
        Console.WriteLine("MAC(物理)アドレス:{0}", ni.GetPhysicalAddress())

        '構成情報、アドレス情報を取得する
        Dim ipips As IPInterfaceProperties = ni.GetIPProperties()
        If Not (ipips Is Nothing) Then
            For Each ip As UnicastIPAddressInformation In ipips.UnicastAddresses
                Console.WriteLine("ユニキャストアドレス:{0}", ip.Address)
                Console.WriteLine("IPv4マスク:{0}", ip.IPv4Mask)
            Next ip
            For Each ip As System.Net.IPAddress In ipips.DnsAddresses
                Console.WriteLine("DNS:{0}", ip.ToString())
            Next ip
            For Each ip As System.Net.IPAddress In ipips.DhcpServerAddresses
                Console.WriteLine("DHCP:{0}", ip.ToString())
            Next ip
            For Each ip As GatewayIPAddressInformation In ipips.GatewayAddresses
                Console.WriteLine("Gateway:{0}", ip.Address)
            Next ip
            For Each ip As System.Net.IPAddress In ipips.WinsServersAddresses
                Console.WriteLine("WINS:{0}", ip.ToString())
            Next ip
        End If

        'IPv4の統計情報を表示する
        If ni.Supports(NetworkInterfaceComponent.IPv4) Then
            Dim ipv4 As IPv4InterfaceStatistics = ni.GetIPv4Statistics()
            Console.WriteLine("受信バイト数:{0}", ipv4.BytesReceived)
            Console.WriteLine("送信バイト数:{0}", ipv4.BytesSent)
            Console.WriteLine("受信したユニキャストパケット数:{0}", _
                ipv4.UnicastPacketsReceived)
            Console.WriteLine("送信したユニキャストパケット数:{0}", _
                ipv4.UnicastPacketsSent)
        End If
    End If
Next ni
C#
コードを隠すコードを選択
//using System.Net.NetworkInformation;
//がソースファイルの一番上に書かれているものとする

//すべてのネットワークインターフェイスを取得する
NetworkInterface[] nis = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in nis)
{
    //ネットワーク接続しているか調べる
    if (ni.OperationalStatus == OperationalStatus.Up &&
        ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
        ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel)
    {
        //ネットワークインターフェイスの情報を表示する
        Console.WriteLine("接続名:{0}", ni.Name);
        Console.WriteLine("説明:{0}", ni.Description);
        Console.WriteLine("種類:{0}", ni.NetworkInterfaceType);
        Console.WriteLine("速度:{0}", ni.Speed);
        Console.WriteLine("MAC(物理)アドレス:{0}", ni.GetPhysicalAddress());

        //構成情報、アドレス情報を取得する
        IPInterfaceProperties ipips = ni.GetIPProperties();
        if (ipips != null)
        {
            foreach (UnicastIPAddressInformation ip in ipips.UnicastAddresses)
            {
                Console.WriteLine("ユニキャストアドレス:{0}", ip.Address);
                Console.WriteLine("IPv4マスク:{0}", ip.IPv4Mask);
            }
            foreach (System.Net.IPAddress ip in ipips.DnsAddresses)
                Console.WriteLine("DNS:{0}", ip.ToString());
            foreach (System.Net.IPAddress ip in ipips.DhcpServerAddresses)
                Console.WriteLine("DHCP:{0}", ip.ToString());
            foreach (GatewayIPAddressInformation ip in ipips.GatewayAddresses)
                Console.WriteLine("Gateway:{0}", ip.Address);
            foreach (System.Net.IPAddress ip in ipips.WinsServersAddresses)
                Console.WriteLine("WINS:{0}", ip.ToString());
        }

        //IPv4の統計情報を表示する
        if (ni.Supports(NetworkInterfaceComponent.IPv4))
        {
            IPv4InterfaceStatistics ipv4 = ni.GetIPv4Statistics();
            Console.WriteLine("受信バイト数:{0}", ipv4.BytesReceived);
            Console.WriteLine("送信バイト数:{0}", ipv4.BytesSent);
            Console.WriteLine("受信したユニキャストパケット数:{0}",
                ipv4.UnicastPacketsReceived);
            Console.WriteLine("送信したユニキャストパケット数:{0}",
                ipv4.UnicastPacketsSent);
        }
    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。