2011-07-22 67 views
9

使用tcpdump時,我似乎無法看到捕獲的所有數據。具體來說,我似乎錯過了框架頭6個字節,我想知道是否有人可以解釋爲什麼。如何使用tcpdump查看完整的snaplen捕獲?

爲了說明問題,我在VMWare上以僅主機的網絡配置安裝了一個Ubuntu實例。產生的流量我ping通網關的VMWare ...在我的情況:

$ 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,源MAC + ethertype = 14個字節)。相應地,IP頭現在開始向下14個字節。

但爲什麼仍然有6個字節丟失?請注意,只顯示了58個字節 - 我期望可以看到64個字節。

回答

5

嘗試使用tcpdump的與-s0

我嘗試這樣做,它爲我工作。(這只是你只需要-s0爲例)

tcpdump -X -s0 port 21

+0

感謝您的建議。這也適用於我顯示數據包的完整尾部(比64更多的字節),但即使使用-s0,似乎還有6個字節從頭部丟失。我誤解你的迴應? –

2

最小的以太網幀大小64個字節。當有效載荷太小時,以太網將填充其內容。 IP頭的總長度值將用於確定填充開始的位置,這將被丟棄,因此不會被Tcpdump顯示。