2

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

だから私はリモートホスト、ローカル、リモートポートのアドレスを持っています。これはかなりクールですが、ローカルソケット所有者のPIDも必要です。それで、そのようなPIDを取得する簡単な方法はありますか?回避策は、GetTcpTable、GetUdpTable、またはAllocateAndGetUdpExTableFromStackとAllocateAndGetTcpExTableFromStack(2k、XP、XP SP2、Vistaの間でこれらの関数に多くの違いがあります)を使用し、結果テーブルをルックアップすることですが、エレガントではなく非効率的です...

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

4

1 に答える 1

2

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

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

于 2009-05-04T18:20:55.027 に答える