私の知る限り、純粋なC#ではこれを行うことができないため、IPヘルパーライブラリに対してP/Invoke呼び出しを行う必要があります。
これは非常に複雑なので、行う必要のあるAPI呼び出しの概要を簡単に説明します。
まず、一部のAPIが新しいため、これはWindows XPでは機能しません(そのため、そのバージョンにはResource Monitorが存在しません)。Windows XPのサポートが必要な場合は、WinPCapのようなものを使用する必要があります。Vista +では、新しいネットワーク情報呼び出しを行うことで状況が改善されます。
IPv4、IPv6、TCP、UDPには別々の呼び出しがあります。簡潔にするために、IPv4 / TCPセットの概要を説明します。プロセスを理解したら、他の部分を埋めるために簡単に複製できるからです。
開始するには、を呼び出す必要がありますGetTcpTable2()
。これにより、マシンで現在アクティブな接続のテーブルが表示されます。MIB_TCPTABLE2
とたくさんのMIB_TCPROW2
構造物ができあがります。各構造は接続を表します。
構造には、MIB_TCPROW2
現在のプロセスIDと照合できるPIDフィールドがあります。
つまり、接続テーブルを継続的にポーリングし、それを繰り返して、プロセスに関連する行をダンプすることを意味します。
これらの行ごとに、を呼び出す必要がありますGetPerTcpConnectionEStats()
。関心のある2つの統計タイプがあります。1つ目TcpConnectionEstatsData
は、送受信されたバイト数に関する情報を返します。2つ目TcpConnectionEstatsBandwidth
は、接続の帯域幅に関する情報を返します。
このためのコードを示していない理由は、コードが非常に複雑で、構造のマーシャリングが多く含まれているためですが、現在よりも多くのことを提供できれば幸いです。
これらの関数のMSDNへのリンクは次のとおりです。
GetTcpTable2()
-http://msdn.microsoft.com/en-us/library/bb408406
(v = vs.85).aspx GetPerTcpConnectionEStats()
- http://msdn.microsoft.com/en-us/library/bb485738(v= vs。 85).aspx