轉載請在文首保留原文出處:EMC中文支持論壇community.emc.com/go/ch

介紹

tcpdump命令最初設計用於觀察TCP/IP性能問題,它是一個用於截取網路分組,並輸出分組內容的工具。tcpdump可以將網路中傳送的數據包的報文頭完全截獲下來提供分析,它支持針對網路層、協議、主機、網路或埠的過濾,並提供and, or, not等邏輯語句來幫助用戶去掉無用的信息。

更多信息

使用tcpdump:

Unix命令tee通常用來允許用戶查看並記錄Unix會話的輸出。使用tcpdump結合tee加上-l選項來實現,命令格式如下:

bsd1# tcpdump -l | tee outfile

另一種方式是通過-w選項直接將抓取數據寫入文件中。之後通過tcpdump -r選項來讀取。抓取數據可以輸入:

bsd1# tcpdump -w rawfile

然後將raw文件轉化成text文件:

bsd1# tcpdump -r rawfile > textfile

tcpdump選項:

tcpdump選項可劃分為四大類型:控制tcpdump程序行為,控制數據怎樣顯示,控制顯示什麼數據,以及過濾命令。

控制程序行為

這一類命令行選項影響程序行為,包括數據收集的方式。之前已介紹了兩個例子:-r和-w。-w選項允許用戶將輸出重定向到一個文件,之後可通過-r選項將捕獲數據顯示出來。

如果用戶知道需要捕獲的報文數量或對於數量有一個上限,可使用-c選項。則當達到該數量時程序自動終止,而無需使用kill命令或Ctrl-C。下例中,收集到100個報文之後tcpdump終止:

bsd1# tcpdump -c100

如果用戶在多餘一個網路介面上運行tcpdump,用戶可以通過-i選項指定介面。在不確定的情況下,可使用ifconfig –a來檢查哪一個介面可用及對應哪一個網路。例如,一臺機器有兩個C級介面,xl0介面IP地址 205.153.63.238,xl1介面IP地址205.153.61.178。要捕捉205.153.61.0網路的數據流,使用以下命令:

bsd1# tcpdump -i xl1

沒有指定介面時,tcpdump默認為最低編號介面。

-p選項將網卡介面設置為非混雜模式。這一選項理論上將限制為捕獲介面上的正常數據流——來自或發往主機,多播數據,以及廣播數據。

-s選項控制數據的截取長度。通常,tcpdump默認為一最大位元組數量並只會從單一報文中截取到該數量長度。實際位元組數取決於操作系統的設備驅動。通過默認值來截取合適的報文頭,而捨棄不必要的報文數據。

如果用戶需截取更多數據,通過-s選項來指定位元組數。也可以用-s來減少截取位元組數。對於少於或等於200位元組的報文,以下命令會截取完整報文: bsd1# tcpdump -s200

更長的報文會被縮短為200位元組。

控制信息如何顯示

-a,-n,-N和-f選項決定了地址信息是如何顯示的。-a選項強制將網路地址顯示為名稱,-n阻止將地址顯示為名字,-N阻止將域名轉換。-f選項阻止遠端名稱解析。下例中,從sloan.lander.edu (205.153.63.30) ing遠程站點,分別不加選項,-a,-n,-N,-f。(選項-c1限制抓取1個報文)

bsd1# tcpdump -c1 host 192.31.7.130
tcpdump: listening on xl0
14:16:35.897342 sloan.lander.edu > cio-sys.cisco.com: icmp: echo request
bsd1# tcpdump -c1 -a host 192.31.7.130
tcpdump: listening on xl0
14:16:14.567917 sloan.lander.edu > cio-sys.cisco.com: icmp: echo request
bsd1# tcpdump -c1 -n host 192.31.7.130
tcpdump: listening on xl0
14:17:09.737597 205.153.63.30 > 192.31.7.130: icmp: echo request
bsd1# tcpdump -c1 -N host 192.31.7.130
tcpdump: listening on xl0
14:17:28.891045 sloan > cio-sys: icmp: echo request
bsd1# tcpdump -c1 -f host 192.31.7.130
tcpdump: listening on xl0
14:17:49.274907 sloan.lander.edu > 192.31.7.130: icmp: echo request

默認為-a選項。

-t和-tt選項控制時間戳的列印。-t選項不顯示時間戳而-tt選項顯示無格式的時間戳。以下命令顯示了tcpdump命令無選項,-t選項,-tt選項的同一報文:

12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)
sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)
934303014.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)

控制顯示什麼數據

可以通過-v和-vv選項來列印更多詳細信息。例如,-v選項將會列印TTL欄位。要顯示較少信息,使用-q,或quiet選項。一下為同一報文分別使用-q選項,無選項,-v選項,和-vv選項的輸出。

12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: tcp 0 (DF)
12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)
12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF) (ttl 128, id 45836)
12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF) (ttl 128, id 45836)

-e選項用於顯示鏈路層頭信息。上例中-e選項的輸出為:

12:36:54.772066 0:10:5a:a1:e9:8 0:10:5a:e3:37:c ip 60:
sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)

0:10:5a:a1:e9:8是sloan.lander.edu中3Com卡的乙太網地址,0:10:5a:e3:37:c是205.153.63.238中3Com卡的乙太網地址。

-x選項將報文以十六進位形式dump出來,排除了鏈路層報文頭。-x和-vv選項報文顯示如下:

13:57:12.719718 bsd1.lander.edu.1657 > 205.153.60.5.domain: 11587+ A? www.microsoft.com. (35) (ttl 64, id 41353)
4500 003f a189 0000 4011 c43a cd99 3db2
cd99 3c05 0679 0035 002b 06d9 2d43 0100
0001 0000 0000 0000 0377 7777 096d 6963
726f 736f 6674 0363 6f6d 0000 0100 01

(未完待續)

參考

Network Troubleshooting Tools

PS:在gitbook上看到一本好書,但是無奈gitbook不掛梯子訪問太慢了。為了方便自己查閱,也方便知識共享,將文章轉載到知乎專欄,由於沒有聯繫到作者(據說是個女神)冒昧掛上來,如果有冒犯的地方,聯繫我我隨時進行刪除。謝謝。

作者:Zhang Jiawen

來源:網路基本功系列:細說網路那些事兒


推薦閱讀:
相關文章