5

TCPView でできることと同様に、プロセスごとのネットワーク使用統計を決定する必要があります。

例 http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png

したがって、この質問またはこの質問の複製を投稿したことで私を撃つ前に、どちらも私が実際にこれを行うのに役立つ完全な回答を持っていないことを指摘したいと思います.

私は調査を行ってきましたが、アクティブな接続とそれに関連するプロセスをリストする方法は明らかに多くあります。これは、 netstat またはIpHlpAPI.dllのような他の Windows API を使用する場合です。

今、私が行ったことから、私はあまり見つけられませんでした-これらのあいまいな用語を除いて: GetPerTcpConnectionEStatsおよびGetPerTcp6ConnectionEStats。おそらく、TCP over IPv4 および IPv6 用です。今、私が読​​んでいた場所では、私がする必要があることを実行できると思われます。ただし、それでもUDPは除外されます。また、これらは、TCPViewer が動作する XP システムでも利用できません。

私はそれらをTCPに使用することに満足していますが、問題は、C#からそれらを使用する方法の例を見つけることができないようです.

要するに、すべては次のいくつかの質問に集約されると思います。

  • TCPViewがどのようにそれを行うかを実際に知っている人はいますか?
  • TCP に GetPerTcpConnectionEStats を使用するにはどうすればよいですか? それとも、私が提案していることを達成することさえできますか?
  • UDP で機能する別の既知の代替手段はありますか?

これの要点は、プロセス自体の独立した帯域幅の使用状況を確認することです。システム帯域幅の合計使用量を計算しません。

すべての回答に感謝します。

4

1 に答える 1

2

似たようなこと (レイテンシと帯域幅) を行う方法を見つけようと少し時間を費やしましたが、投資する時間がないためにあきらめなければなりませんでした。最終的に答えが得られることを期待して、ここに調査結果を追加すると思いました。

明らかに PInvoke を使用する必要がありますが、詳細は私の経験をはるかに超えていると思います。

CodeProject のこのラッパー ライブラリは、Windows XP および Server 2003 でのみ動作するAllocateAndGetTcpExTableFromStackを使用します。

出発点として見つけることができる最も近い情報 (Vista/Server 2008 以降の場合) は、 pinvoke.net のGetExtendedTcpTableの例です。

ツールPInvoke Interop Assistantは、アンマネージ コードを呼び出す方法を決定するのに役立つ場合があります。

もし私がこれを試し続けるなら、私は次のことを理解しようとします:

  1. SetPerTcpConnectionEStatsを呼び出して、適切なTCP_ESTATS_TYPEを介して TcpConnectionEstatsBandwidth の収集を有効にする方法。
  2. IPGlobalProperties.GetActiveTcpConnectionsを使用して、 MIB_TCPROWの作成に必要な情報を取得します。
  3. GetPerTcpConnectionEStatsを呼び出してデータを監視する方法を決定します。
于 2012-05-18T07:06:23.183 に答える