2011-01-03 4 views
4

私は、特定の時点でインターネット接続を使用しているマシン/サーバのアプリケーションと、可能であればどのくらいの帯域幅を使用しているかをC#で確認したいと考えています。誰も私がこれに頭をスタートさせるのを助けることができますか?.netでインターネットの使用を監視する

+1

これは役に立つかもしれません - > http://stackoverflow.com/questions/566139/detecting-network-connection-speed-and-bandwidth-usage-in-c – digEmAll

+1

また、このq&aを見てください:http: //stackoverflow.com/questions/442409/c-bandwidth – digEmAll

+0

洞察のために@digに感謝します。私はこれが役に立つスタートだと思う。これを答えに変換して、それを1つにすることができます。 – samar

答えて

0

私が見つけたのは非常に便利なツールとしてがありました。私のアプリケーションには私のアプリケーションで使うことができるAPIがあるかどうかはまだチェックしていません。必要な情報

ありがとうございました。

+0

こんにちは、何かを見つけましたか? –

3

私はコメントが小さすぎるので答えを書くことにしました。

まあ、stackoverflowの他のQ & Aを読んで、インターネット上を見て、あなたの問題のための簡単な解決策を見つけることができませんでした。

実際には、.NETプロセスのためにあなただけのから情報を取得する必要が、本当に簡単です - このQ&A

しかし、一般的にに示すように、パフォーマンスカウンタを「.NET CLRネットワーク送信受信バイト/バイト」プロセスごとに使用される帯域幅を取得するのは簡単な作業ではありません。たとえばについては

おそらくそれは彼ら(または同様のものを使用してプロセスとIPポートのペアをマップするため、「Microsoftネットワークモニタ」スニファは、唯一のTCPトラフィックのためのインターネットパケットを生成プロセスをトレースすることができ、TCPはそれconnected protocolです簡単です)。
もしあなたがそれを試してみたいのであれば、公開されたAPIを使用することができます(いくつかのヒントについてはthisブログエントリをご覧ください)。しかし

、これらQに& Aさん(LINK 1LINK 2)、右を示唆し、そしておそらく唯一の方法は、ネットワークトラフィックを傍受し、それに.NET呼び出し可能なAPIを暴露することができますNDIS/TDIドライバを書くことであるとして、 。

問題は、このようなドライバはマネージコードで記述できないため、C/C++で実装する必要があることです。
明らかに、すでに書かれたドライバ/スニファを呼び出して呼び出し可能なAPIを公開している場合は、それを使うことができます。
たとえば、WinPCapにはSharpPCapまたはPCap.Netのような.NETラッパーが1つありますが、(わからない)パケットのソースプロセス情報を取得することはできません。

0

digEmAllが指摘しているように、Vista以前のWindowsでは、自分のドライバの作成やサードパーティー製のものを使用することになります。 Vista、2008およびWindows 7では、GetPerTcpConnectionEStats APIを使用することができます(MSDNページでの使用例が多数あります)。リソースモニタは、このAPIと、より古いネットワーク統計情報のための古いGetTcpTable/GetTcpRow APIに依存しています。

関連する問題