0

pcapを使用してパケットキャプチャを実行する非常に単純なCプログラムを作成しました。つまり、それは私のネットワークアクティビティのごく一部を拾うだけです。(パターンは、新しいTCP接続でのみ取得するというものだと思います。)

たとえば、ブラウザまたはwgetを使用してGETリクエストを実行したとき、またはX-Chat IRCクライアントを起動して接続したときに、大量のパケットを取得します。

ただし、IRCクライアントを実行したままにすると、テキストメッセージに対応するパケットを取得しません。同様に、ホームネットワーク上のARPブロードキャスト、またはWebサイトにpingを実行するときにパケットにpingを実行しません。

なぜそれが私が送受信しているパケットのこの小さなサブセットだけを拾っているのか疑問に思います。これが私のコードです。フィードバックをいただければ幸いです。

コード: http: //pastebin.com/QDHRy6jM

4

2 に答える 2

0

修正しました。TIMEOUT値を-1から他の値に変更すると、機能します(つまり、すべてのネットワークアクティビティを検出します)。そこで何が起こっているのか本当にわからないので(まだあまり考えていません)、誰かがそうしたらホラしてください。

于 2010-12-02T01:35:35.130 に答える
0

おそらく起こっていることは、タイムアウトがBPF(* BSD、OS X)、Solaris、またはWindows with WInPcapと同じように動作するプラットフォームで実行していることです。この場合、pcapが使用している基盤となるパケットキャプチャメカニズムは配信されません。パケットはすぐに送信されますが、パケットのバッチをバッファリングし、バッファがいっぱいになるかタイムアウトが期限切れになると、パケットをpcapに配信します。-1は「タイムアウトなし」または「非常に長いタイムアウト」として解釈されます。

その場合、HTTP getを実行して十分に大きな応答が返される場合のように、バッファをいっぱいにするのに十分なパケットが到着した場合、またはIRCセッションに接続するパケットが多数含まれている場合、パケットは次のように表示されます。ただし、ほとんど静かなネットワーク上のARPパケットなど、たまにしかパケットが到着しない場合、バッファをいっぱいにするのに十分なパケットが到着するまで、パケットはバッファに残ります。これには、無期限に長い時間がかかるか、非常に長いタイムアウトが発生する可能性があります。有効期限が切れますが、かなり時間がかかる場合があります。

タイムアウトを下げる(tcpdumpは1000、つまり1秒を使用し、Wiresharkは100、つまり1/10秒を使用します)ということは、バッファーを満たすのに十分なパケットが到着しなくても、パケットが適度に短い時間内に表示されることを意味します。

于 2013-01-13T00:41:00.493 に答える