無差別モードかどうかに関係なく実行します。
tcpdump -i "$INTERFACE" -vvv -n -XX -S -s0 -e
停止すると、次の結論が出ます。
601 packets captured
938 packets received by filter
230 packets dropped by kernel
なぜ違いがありますか? 107個のパケットが失われた場所はどこですか?ルータの背後にある自分だけがローカルネットワーク上のパケットを100%取得またはキャプチャできますか?
答え1
tcpdumpがパケットを「削除」する理由は、ネットワークから到着するパケットに追いつくのに十分なバッファスペースがないためです。
キャプチャされたパケットと受信されたパケットの違いは、オペレーティングシステムまたはtcpdumpの実装によって引き起こされるか、より一般的に^ Cを使用してプロセスを中断することによって発生する可能性があります。
パケットあたりのバッファサイズを「s0」に設定すると、それぞれ64KBに設定されますman tcpdump
。通常、-Xを使用してパケット全体を表示し、tcpdumpを使用してヘッダーを表示するには最大1500に設定します。必須値 - 160バイト、IPv4ヘッダーサイズ。
画面操作も一般的に遅いです。速度が必要な場合、実際にリアルタイムで表示する必要がない場合は、出力をファイルに送信します。
「tcpdump」という人から:
「大きなスナップショットを撮ると、パケットを処理するのに必要な時間が長くなるだけでなく、パケットバッファリングの量も効果的に減ります。これによりパケット損失が発生する可能性があります。snaplenをキャプチャされたプロトコル情報の最小量に制限する必要があります。」
答え2
答え通り他の場所でとここ、tcpdump(4.0以降のデフォルト値、1.0以降のlibpcap)には、-B NNNN
バッファサイズ(NNNN * 1024バイト単位、Linuxの場合はデフォルト値2MiB)を設定するオプションがあります。 snaplenを低く設定したくない場合は、これは便利な代替手段です。
例:
tcpdump -i "${INTERFACE}" -B 4096 -nn -w capture.pcap
pcapの使用を検討することもできます。キャプチャフィルタ既知の特定の種類または既知の属性を持つパケットを探していて、すべてをキャプチャすることに興味がない場合。
スイス答えには別の便利な点が含まれています。パケットキャプチャをリアルタイムで表示する必要がない場合は、端末ではなくファイルとして出力することをお勧めします。