これが問題にいくつかの光を投げかけることを望みます。マンページから:
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を使用してキャプチャファイルのエントリ数を返すより良い方法があると思います...