Windowsのソケット番号からのPID?
質問
さまざまなアプリケーションがネットワークと送受信したバイト数をカウントする必要があります。最初に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ソースコードを参照してください。それほど多くはなく、一見の価値があります。