2012-03-11 18 views
5

TCPViewの処理と同様のプロセスごとのネットワーク使用状況の統計を判断する必要があります。あなたがthis question、またはthis questionの重複を投稿するために私を撃つ前に接続帯域幅の統計情報を取得する

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

だから、私はそれらのいずれもが、私は実際にこれを行うに役立つ可能性が徹底的に答えを持っていることを指摘したいと思います。

私は研究を行ってきました。これは、netstatやその他のWindows APIのどちらであろうと、アクティブな接続と関連するプロセスを明示的に表示する方法がたくさんあります。IpHlpAPI.dllなどです。

は今、私がやったGoogle'ingから、私はあまり見つかっていない - これらのあいまいな用語を除い:GetPerTcpConnectionEStatsGetPerTcp6ConnectionEStats。おそらくIPv4とIPv6上のTCPのために。今私が読んでいた場所で、私がする必要があることをすることができると思われる。しかし、それでもUDPは除外されます。また、TCPViewerが動作するXPシステムでは利用できません。

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

は、だから私はそれがすべてのこれらのいくつかの質問に沸く推測:

  • は誰もが実際にTCPViewはそれをしない方法を知っていますか?
  • TCPにGetPerTcpConnectionEStatsを使用するにはどうすればよいですか?それとも、私が提案していることを達成することすらできますか?
  • UDPで動作する別の既知の方法がありますか?

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

ありがとうございます。すべての回答があります。

+0

これはWMI /パフォーマンスカウンタを使用して行うことができますが、個人的にはわかりにくいAPIを見つけます...グッドな回答が得られず、Googleのさらなるキーワードを探している場合に備えてです。 –

+0

これにはどんな解決策がありますか? –

+0

@TomerPeled:私は決して解決策を見つけられず、プロジェクトを放棄したことはありません(とにかく個人的なので)。あなたが個々のプロセスの帯域幅使用量を決定する方法を知っていれば、それを回答として投稿してください。それは私の古いプロジェクトを仕上げるために私の中でいくつかの動機づけを引き起こすかもしれません:) – caesay

答えて

1

私は何か似たようなことを考えようとしましたが(待ち時間と帯域幅)、投資する時間がないためにあきらめてしまいました。私は最終的に答えが得られることを期待してここに私の発見を追加すると思った。

あなたは明らかにPInvokeを使用する必要があります。詳細は私の経験をはるかに超えているのではないかと心配しています。

このWrapper Library on CodeProjectは、Windows XPおよびServer 2003でのみ動作するAllocateAndGetTcpExTableFromStackを使用します。申し訳ありませんが、まだ帯域幅を取得しません。

開始点(Vista/Server 2008以降)で最も近い情報は、GetExtendedTcpTableのpinvoke.netの例です。

ツールPInvoke Interop Assistantは、アンマネージコードの呼び出し方法を決定するのに役立ちます。

私はこれをしようとし続けるとしたら、私は次のことを把握してみたい:

  1. 適切なTCP_ESTATS_TYPE経由TcpConnectionEstatsBandwidthの収集を可能にするためにSetPerTcpConnectionEStatsを呼び出す方法。
  2. 私はIPGlobalProperties.GetActiveTcpConnectionsを使用して、MIB_TCPROWの作成に必要な情報を取得します。
  3. GetPerTcpConnectionEStatsを呼び出してデータを監視する方法を決定します。
関連する問題