2009-05-04 16 views
2

さまざまなアプリケーションによってネットワークから送受信されたバイト数をカウントする必要があります。最初に私はLSPの使用を考えましたが、LSPをまったく使用しないアプリケーションがたくさんあります(たとえばSMB)。これが私が小さなスニファを書いた理由です。このアプリケーションはIPレベルで動作し、recvfromを使用してデータを収集します。Windowsのソケット番号からのPID?

私はリモートホスト、ローカルおよびリモートポートのアドレスを持っています。これはかなりクールですが、私はまた、ローカルソケット所有者のPIDを持つ必要があります。ですから、そのようなPIDを得る簡単な方法はありますか?この問題を回避するには、GetTcpTable、GetUdpTableまたはAllocateAndGetUdpExTableFromStackとAllocateAndGetTcpExTableFromStackを使用している(2000、XP、XP SP2とVistaの間、これらの機能の違いがたくさんある)、および結果表を検索するが、それは洗練さと非効率です...

ので、任意の種類の "GetPIDOfSocket"関数がありますか?さまざまな言語(例:C++、Delphi)を使用できるため、解決策はWinAPI(no .net)のみです。

+1

最近ご参加されたようですが、私はあなたにヒントを教えてください。通常、使用しているプログラミング言語を提供すると便利です。まだ空のタグスロットが1つあります。 –

答えて

2

GetTcpTableまたはAllocateAndGetTcpExTableFromStackを使用することは申し訳ありませんが、回避策ではありません。それは実際に他のnetstatタイプのアプリケーションの動作方法です。 AFAIKにWin32 "GetPIDOfSocket"関数がない場合、唯一のオプションはポートテーブル関数を使ってポーリングすることです。しかし、少なくともあなたは自分自身をコード化することができ、netstatプロセスを生成する必要はありません。

netstatphereのSysInternals Cソースコードを参照してください。それほど多くはありませんし、一見の価値があります。

関連する問題