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

コンピュータのネットワーク接続に関する構成、統計情報を取得する

IPGlobalProperties.GetIPGlobalPropertiesメソッドを使用する

.NET Framework 2.0からは、IPGlobalProperties.GetIPGlobalPropertiesメソッドで取得できるIPGlobalPropertiesオブジェクトにより、ローカルコンピュータのネットワーク接続に関する様々な情報を取得できます。

まずは、IPGlobalPropertiesのプロパティからホスト名やドメイン名などの情報を表示する例を示します。

VB.NET
コードを隠すコードを選択
Dim ipprop As System.Net.NetworkInformation.IPGlobalProperties = _
    System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()

Console.WriteLine("ホスト名:{0}", ipprop.HostName)
Console.WriteLine("ドメイン名:{0}", ipprop.DomainName)
Console.WriteLine("DHCPスコープ名:{0}", ipprop.DhcpScopeName)
Console.WriteLine("WINSプロキシか:{0}", ipprop.IsWinsProxy)
Console.WriteLine("NetBIOSノードタイプ:{0}", ipprop.NodeType)
C#
コードを隠すコードを選択
System.Net.NetworkInformation.IPGlobalProperties ipprop =
    System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties();

Console.WriteLine("ホスト名:{0}", ipprop.HostName);
Console.WriteLine("ドメイン名:{0}", ipprop.DomainName);
Console.WriteLine("DHCPスコープ名:{0}", ipprop.DhcpScopeName);
Console.WriteLine("WINSプロキシか:{0}", ipprop.IsWinsProxy);
Console.WriteLine("NetBIOSノードタイプ:{0}", ipprop.NodeType);

MSDN「IPGlobalProperties クラス」によると、IPGlobalPropertiesのプロパティとその意味は、次のようなものです。

IPGlobalPropertiesクラスのプロパティ 説明
DhcpScopeName DHCP (Dynamic Host Configuration Protocol) スコープ名を取得します。
DomainName ローカル コンピュータが登録されているドメインを取得します。ドメインに属していない場合は、空白文字("")が返されます。
HostName ローカル コンピュータのホスト名(コンピュータの NetBIOS 名)を取得します。
IsWinsProxy ローカル コンピュータが、WINS (Windows Internet Name Service) プロキシとして動作しているかどうかを指定する Boolean 値を取得します。
NodeType ローカル コンピュータの NetBIOS (Network Basic Input/Output System) ノード タイプを取得します。Broadcast(ブロードキャスト ノード)、Hybrid(ハイブリッド ノード)、Mixed(混合ノード)、Peer2Peer(ピアツーピア ノード)、Unknown(不明なノード タイプ)のいずれかです。

アクティブな接続、リスナの情報を取得する

IPGlobalPropertiesにより、現在アクティブなTCP接続、リスナ、UDPリスナの情報を取得することもできます。以下の例では、ローカルコンピュータ上のアクティブなIPv4 TCP接続に関する情報を表示しています。

VB.NET
コードを隠すコードを選択
'IPGlobalPropertiesを取得
Dim ipprop As System.Net.NetworkInformation.IPGlobalProperties = _
    System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()
'TcpConnectionInformationの配列を取得
Dim infos As System.Net.NetworkInformation.TcpConnectionInformation() = _
    ipprop.GetActiveTcpConnections()
'TCP接続に関する情報を列挙する
Dim info As System.Net.NetworkInformation.TcpConnectionInformation
For Each info In infos
    Console.WriteLine("ローカルアドレス:{0}", info.LocalEndPoint)
    Console.WriteLine("リモートアドレス:{0}", info.RemoteEndPoint)
    Console.WriteLine("状態:{0}", info.State)
Next info
C#
コードを隠すコードを選択
//IPGlobalPropertiesを取得
System.Net.NetworkInformation.IPGlobalProperties ipprop =
    System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties();
//TcpConnectionInformationの配列を取得
System.Net.NetworkInformation.TcpConnectionInformation[] infos =
    ipprop.GetActiveTcpConnections();
//TCP接続に関する情報を列挙する
foreach (System.Net.NetworkInformation.TcpConnectionInformation info in infos)
{
    Console.WriteLine("ローカルアドレス:{0}", info.LocalEndPoint);
    Console.WriteLine("リモートアドレス:{0}", info.RemoteEndPoint);
    Console.WriteLine("状態:{0}", info.State);
}

アクティブな接続、リスナの情報を取得するために使われるIPGlobalPropertiesクラスのメソッドとその簡単な説明を以下にまとめます(MSDN「IPGlobalProperties クラス」からの抜粋)。

IPGlobalPropertiesクラスのメソッド 説明
GetActiveTcpConnections ローカル コンピュータ上のインターネット プロトコル Version 4 (IPv4: Internet Protocol version 4) 伝送制御プロトコル (TCP: Transmission Control Protocol) 接続に関する情報を返します。返される情報には、Listen 状態を除くすべての TCP 状態にある接続が含まれます。
GetActiveTcpListeners ローカル コンピュータ上のインターネット プロトコル Version 4 (IPv4) 伝送制御プロトコル (TCP) リスナに関するエンドポイント情報を返します。返される情報には、Listen 状態を除くすべての TCP 状態にあるリスナが含まれます。
GetActiveUdpListeners ローカル コンピュータ上のインターネット プロトコル Version 4 (IPv4) ユーザー データグラム プロトコル (UDP: User Datagram Protocol) リスナに関する情報を返します。

統計情報を取得する

さらに、IPGlobalPropertiesでネットワークの統計情報を取得することもできます。以下の例では、ローカルコンピュータのIPv4トラフィック統計情報を表示しています。

VB.NET
コードを隠すコードを選択
'IPGlobalPropertiesを取得
Dim ipprop As System.Net.NetworkInformation.IPGlobalProperties = _
    System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()
'IPv4のトラフィック統計情報を取得する
Dim stat As System.Net.NetworkInformation.IPGlobalStatistics = _
    ipprop.GetIPv4GlobalStatistics()
'情報を表示する
Console.WriteLine("送信IPパケット数:{0}", stat.OutputPacketRequests)
Console.WriteLine("受信IPパケット数:{0}", stat.ReceivedPackets)
C#
コードを隠すコードを選択
//IPGlobalPropertiesを取得
System.Net.NetworkInformation.IPGlobalProperties ipprop =
    System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties();
//IPv4のトラフィック統計情報を取得する
System.Net.NetworkInformation.IPGlobalStatistics stat =
    ipprop.GetIPv4GlobalStatistics();
//情報を表示する
Console.WriteLine("送信IPパケット数:{0}", stat.OutputPacketRequests);
Console.WriteLine("受信IPパケット数:{0}", stat.ReceivedPackets);

IPGlobalPropertiesクラスで統計情報を取得するために使われるメソッドとその簡単な説明を以下にまとめます(MSDN「IPGlobalProperties クラス」からの抜粋)。

IPGlobalPropertiesクラスのメソッド 説明
GetIcmpV4Statistics ローカル コンピュータのインターネット コントロール メッセージ プロトコル (ICMP: Internet Control Message Protocol) Version 4 の統計データを提供します。
GetIcmpV6Statistics ローカル コンピュータのインターネット コントロール メッセージ プロトコル (ICMP) Version 6 の統計データを提供します。
GetIPv4GlobalStatistics ローカル コンピュータのインターネット プロトコル Version 4 (IPv4) 統計データを提供します。
GetIPv6GlobalStatistics ローカル コンピュータのインターネット プロトコル Version 6 (IPv6) 統計データを提供します。
GetTcpIPv4Statistics ローカル コンピュータの伝送制御プロトコル/インターネット プロトコル Version 4 (TCP/IPv4) 統計データを提供します。
GetTcpIPv6Statistics ローカル コンピュータの伝送制御プロトコル/インターネット プロトコル Version 6 (TCP/IPv6) 統計データを提供します。
GetUdpIPv4Statistics ローカル コンピュータの UDP/IPv4 (User Datagram Protocol / Internet Protocol version 4) 統計データを提供します。
GetUdpIPv6Statistics ローカル コンピュータの UDP/IPv6 (User Datagram Protocol / Internet Protocol version 6) 統計データを提供します。

Helper APIを使用する

MSDNによると、IPGlobalPropertiesクラスの提供する情報は、Internet Protocol Helper APIの関数によって提供される情報と同じということです。

Helper APIをVB.NETやC#で使用する具体例に関しては、以下のページをご覧ください。

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

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。