tcpdump:「キャプチャされたパケット」と「フィルターによって受信されたパケット」


11

呼び出すスクリプトがあります

tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap

スクリプトの他の部分がバックグラウンドでいくつかのトラフィックを開始する間、複数のIP-sで。パケットが戻ってくるかどうかを確認し、パッケージを受け取った場合のみ手動で調べます。tcpdumpのエラー出力は、最初はこれで問題ないように見えましたが、

問題は、主題が示唆しているように、「キャプチャされたパケット」と「フィルターによって受信されたパケット」の違いは何ですか?パケットを記録しなかったキャプチャがありますが、「0パケットがキャプチャされ、2パケットがフィルタによって受信されました」という出力が矛盾しているように聞こえます。最初は「フィルターが受信した0パケット」を探していましたが、パケットが受信されなかった場合は、常にエラー出力に書き込まれるわけではありません。では、これらの数字は何を示しているのでしょうか?

応答パケットが受信されなかった場合にそれらのケースをフィルタリングしたい場合、何を探すべきかを知る必要があります。

回答:


12

これが問題にいくつかの光を投げかけることを望みます。マンページから:

tcpdumpがパケットのキャプチャを完了すると、次の数を報告します。

キャプチャされたパケット(これは、tcpdumpが受信して処理したパケットの数です)。

フィルターによって受信されたパケット(これの意味は、tcpdumpを実行しているOS、および場合によってはOSの構成方法に依存します-コマンドラインでフィルターが指定されている場合、一部のOSでは、それらはフィルター式によって一致し、フィルター式によって一致した場合でも、tcpdumpがまだそれらを読み取って処理したかどうかに関係なく、他のOSでは、tcpdumpが読み取ったかどうかに関係なくフィルター式によって一致したパケットのみをカウントしますそして、それらをまだ処理し、他のOSでは、フィルター式に一致し、tcpdumpによって処理されたパケットのみをカウントします);

カーネルによってドロップされたパケット(これは、OSがアプリケーションにその情報を報告する場合、tcpdumpが実行されているOSのパケットキャプチャメカニズムによって、バッファスペースの不足が原因でドロップされたパケットの数です。そうでない場合は、 0として報告されます)。

とがあります2009年からメーリングリストのエントリ説明は:

「filters received by filter」番号は、ps_recvへの呼び出しからの番号pcap_stats()です。BPF、それはだbs_recvから番号BIOCGSTATS ioctl。その数には、BPFに渡されたすべてのパケットが含まれます。これらのパケットは、まだlibpcapによって読み取られていない(したがってtcpdumpに渡されていない)バッファーにあるか、またはlibpcapによって読み取られたがtcpdumpにまだ渡されていないバッファーにある可能性があるため、パケットをカウントできます。 「キャプチャされた」とは報告されません。

たぶんプロセスが速すぎて殺されますか?パケットがキャプチャされた-c Nときにtcpdumpを終了するように指示するフラグもありNます。

あなたの問題はかなり専門的であるように思われるので、直接または何百もの言語バインディングの1つを介して使用libpcapすることもできます

あなたの質問に対して、あなたが得るすべてはファイルのキャプチャされたパッケージなcapture.capので、それが空ではない実行を見て、これらを調べることができます、すなわち、ええと、行を数えますか?

tcpdump -r capture.cap | wc -l

libpcapを使用してキャプチャファイルのエントリ数を返すより良い方法があると思います...


1
また、パケット処理が遅い場合、パケットがカーネルに認識される前にNICハードウェアでドロップされる可能性があります。
クレイグ

@クレイグ:このスクリプトを実行しているボックスは仮想化されているので、NICの速度はわかりません。
Alex Biro 2012年

@sr_:行の良いアイデア、簡単すぎる:) -wスイッチを使用する必要がないよりも、出力をファイルにリダイレクトして行番号を数えるだけだと思います。できるだけ早く確認します。
Alex Biro、2012年

@ tuareg85:キャプチャされたパケットを分析するの-wは素晴らしいことです。たとえば、Wiresharkを使用できます。
sr_ 2012年

1
プロセスを強制終了するのが早すぎることはおそらく問題ではありません。トラフィックを停止してから3秒待つので、それで十分だと思います。また、tcpdumpがあまりにもエラー出力を終了する時間を持っており、パケットは常に0だったカーネルで落とさ
アレックス・ビロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.