tcpdump是一個功能強大的指令行資料包分析器,它是通過監聽伺服器的網卡來擷取資料包,所有通過網絡通路的資料包都能擷取到。它也提供了過濾器的功能,可以擷取指定的網絡、端口或協定的資料包
程式員日常排查問題,最常用的是使用過濾器功能擷取指定端口的資料包,用來分析伺服器是否收到請求、請求資料是否完整。
參數介紹
tcpdump指令的參數很多,詳見如下

這裡隻介紹一些常用的參數
-c count
count表示數量。抓取資料包的數量達到count後結束指令,如果不使用-c 參數,會不停的抓取資料包,直到手動停止
-C file_size
抓取資料包儲存到檔案時,通過該指令指定檔案的大小。檔案達到指定大小後,會建立一個在原檔案名稱後面加上序号的新檔案,如:dump.txt,dump.txt1。file_size的機關是b
-D
列出伺服器所有網卡。tcpdump預設監聽的是編号最小的那個網卡,一般是eth0。在進行抓包時可以通過 -i 參數指定監聽的網卡,any表示監聽所有網卡
-i interface
指定監聽的網卡名稱,any表示監聽所有的網卡
-n
輸出結果中,不把ip轉換成主機名(預設顯示的是主機名)
-q
快速輸出,隻輸出簡要的資料包資訊
-r file
從檔案中擷取資料包,不再從網絡擷取資料包
-t
不輸出時間戳
-w file
将抓取的資料包儲存到檔案,-r 參數可以從檔案中讀取資料包
-W filecount
指定檔案的數量,當檔案滾動到指定數量後會從第一個檔案開始覆寫
除了以上參數,還有一些關鍵字可以用來進行條件過濾,常用關鍵字如下
-host
過濾主機,如 tcpdump host 192.168.1.110 隻抓取經過這個ip的資料包
-src
用來過濾請求來源方的參數,如:tcpdump src host 192.168.1.110 隻抓取從這個ip過來的資料包
-dst
用來過濾請求接收方的參數,如:tcpdump dst host 192.168.1.110 隻抓取發送到這個ip的資料包
-port
過濾端口,如:tcpdump port 8080 隻抓取經過8080端口的資料包
-net
過濾網絡,如:tcpdump net 192.168 隻抓取經過這個網段的資料包
-and、not、or
條件過濾,和字面意思一樣。如:tcpdump net 192.168 and port 8080 抓取經過192.168網段并經過8080端口的資料包
資料包分析
抓取的資料包格式如下
20:17:43.496528
時間戳,時:分:秒.微秒
IP
網際網絡協定的名稱
180.101.49.12.http > iZbp14w0b2rs7i1400bjjmZ.42468180.101.49.12.http
請求發送方的ip和端口 > 請求接收方的ip和端口。端口有時會顯示為某個網絡協定,如http、ssh、mysql等
Flags [R]
flag辨別和狀态,可選的狀态有: [S.] [.] [P.] [F.][R]
seq、ack、fin
表示tcp協定的3次握手和4次揮手的過程。seq表示請求的序列号,ack是回答的序列号,fin表示完成。這裡顯示的序列号是相對值,-S參數可以顯示絕對值
win
表示目前視窗的可用大小
length
表示封包體的長度,從長度可以簡單分析是否正确接收了請求
通過以上結果隻能做簡單的分析,可以使用-w參數把資料包寫入檔案,檔案中記錄的資料包比指令行要詳細的多。借助分析工具可以對檔案進一步分析,這裡推薦使用Wireshark,這個工具是開源的,開箱即用使用簡單,這裡不做詳細介紹了
常用的指令組合
抓取8080端口的資料包
抓取從192.168.1.110發送到192.168.1.111的資料包
抓取192.168網段除了192.168.1.110的請求的資料包
抓取8080端口的資料包并寫入dump.log檔案中
注意事項
1.tcpdump需要用管理者權限運作,可以用sudo指令或者root使用者
2.抓取的資料包通過length字段隻能做一些簡單的判斷,想要詳細分析,需要借助資料包分析工具,如:Wireshark
抟扶搖而上者九萬裡