12

tcpdump を使用すると、キャプチャのすべてのデータを表示できないようです。具体的には、フレームの先頭から 6 バイトが欠落しているようですが、その理由を誰かが説明できるかどうか疑問に思っています。

説明のために、ホストのみのネットワーク構成で VMWare に Ubuntu インスタンスをセットアップします。トラフィックを生成するには、VMWare ゲートウェイに ping を実行します...私の場合:

$ ping 192.168.153.1

次に、データをキャプチャして印刷します。

$ tcpdump -i eth0 -x -s 64
...
10:23:24.419067 IP 192.168.153.1 > ubuntu.local: ICMP echo reply, id 2959, seq 137, length 64
    0x0000:  4500 0054 2313 4000 4001 63bf c0a8 9901
    0x0010:  c0a8 9984 0000 af80 0b8f 0089 0cb2 294e
    0x0020:  1d64 0600 0809 0a0b 0c0d 0e0f
10:23:25.418807 IP ubuntu.local > 192.168.153.1: ICMP echo request, id 2959, seq 138, length 64
    0x0000:  4500 0054 0000 4000 4001 86d2 c0a8 9984
    0x0010:  c0a8 9901 0800 df7f 0b8f 008a 0db2 294e
    0x0020:  e463 0600 0809 0a0b 0c0d 0e0f

この時点で予想されるように、表示される合計バイト数は 64 ではありません。データリンク ヘッダーは隠され、IP バイトが最初に表示されます (つまり、「4500」)。データリンク ヘッダー バイトを表示するには、別の x を追加します。

$ tcpdump -i eth0 -xx -s 64
...
10:29:29.523043 IP 192.168.153.1 > ubuntu.local: ICMP echo reply, id 2959, seq 501, length 64
    0x0000:  000c 292a 4f6c 0050 56c0 0001 0800 4500
    0x0010:  0054 b305 4000 4001 d3cc c0a8 9901 c0a8
    0x0020:  9984 0000 007d 0b8f 01f5 79b3 294e 5cfa
    0x0030:  0700 0809 0a0b 0c0d 0e0f
10:29:30.522884 IP ubuntu.local > 192.168.153.1: ICMP echo request, id 2959, seq 502, length 64
    0x0000:  0050 56c0 0001 000c 292a 4f6c 0800 4500
    0x0010:  0054 0000 4000 4001 86d2 c0a8 9984 c0a8
    0x0020:  9901 0800 f77b 0b8f 01f6 7ab3 294e 5cfa
    0x0030:  0700 0809 0a0b 0c0d 0e0f

より多くのバイトが表示されるようになりました。これらはイーサネット フレーム ヘッダーの 14 バイトだと思います (dest、source MAC + ethertype = 14 バイト)。これに対応して、IP ヘッダーは 14 バイト下から始まります。

しかし、なぜまだ 6 バイトが欠落しているのでしょうか? 58 バイトしか表示されていないことに注意してください。64 バイトが表示されると予想していました。

4

2 に答える 2

7

でtcpdumpを使用してみてください-s0

私はこれを試してみましたが、うまくいきました..(-s0だけが必要な例にすぎません)

tcpdump -X -s0 port 21

于 2011-11-27T23:26:30.210 に答える
2

イーサネット フレームの最小サイズは 64 バイトです。ペイロードが小さすぎる場合、イーサネットはそのコンテンツをパディングします。IP ヘッダーの全長値は、パディングの開始位置を決定するために使用されます。パディングは破棄されるため、Tcpdump には表示されません。

于 2012-12-26T21:37:52.107 に答える