質問

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

つまり、リモートホスト、ローカルポート、およびリモートポートのアドレスがあります。これはかなりクールですが、ローカルソケット所有者のPIDも必要です。だから、そのようなPIDを取得する簡単な方法はありますか?回避策は、GetTcpTable、GetUdpTableまたはAllocateAndGetUdpExTableFromStackおよびAllocateAndGetTcpExTableFromStackを使用して(2k、XP、XP SP2、およびVistaでこれらの機能に多くの違いがあります)、結果テーブルを検索することです...

つまり、「GetPIDOfSocket」のようなものはありますか?関数? C ++、Delphiなどのさまざまな言語を使用できるため、解像度はWinAPI(.netのみ)である必要があります。

役に立ちましたか?

解決

申し訳ありませんが、 GetTcpTable または AllocateAndGetTcpExTableFromStack を使用することは回避策ではなく、実際には他のnetstatタイプのアプリケーションの動作です。私の知る限り、Win32 " GetPIDOfSocket" 関数はありません。唯一のオプションは、ポートテーブル関数を使用してポーリングすることです。ただし、少なくとも自分でコーディングでき、netstatプロセスを生成する必要はありません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top