tcpdump是一個(gè)功能強(qiáng)大的命令行數(shù)據(jù)包分析器每界,它是通過(guò)監(jiān)聽(tīng)服務(wù)器的網(wǎng)卡來(lái)獲取數(shù)據(jù)包指攒,所有通過(guò)網(wǎng)絡(luò)訪問(wèn)的數(shù)據(jù)包都能獲取到秉氧。它也提供了過(guò)濾器的功能刽漂,可以獲取指定的網(wǎng)絡(luò)演训、端口或協(xié)議的數(shù)據(jù)包
程序員日常排查問(wèn)題,最常用的是使用過(guò)濾器功能獲取指定端口的數(shù)據(jù)包贝咙,用來(lái)分析服務(wù)器是否收到請(qǐng)求样悟、請(qǐng)求數(shù)據(jù)是否完整。
參數(shù)介紹
tcpdump命令的參數(shù)很多颈畸,詳見(jiàn)如下
這里只介紹一些常用的參數(shù)
?-c?count
count表示數(shù)量。抓取數(shù)據(jù)包的數(shù)量達(dá)到count后結(jié)束命令没讲,如果不使用-c 參數(shù)眯娱,會(huì)不停的抓取數(shù)據(jù)包,直到手動(dòng)停止
-Cfile_size
抓取數(shù)據(jù)包保存到文件時(shí)爬凑,通過(guò)該命令指定文件的大小徙缴。文件達(dá)到指定大小后,會(huì)創(chuàng)建一個(gè)在原文件名稱(chēng)后面加上序號(hào)的新文件嘁信,如:dump.txt于样,dump.txt1。file_size的單位是b
-D
列出服務(wù)器所有網(wǎng)卡潘靖。tcpdump默認(rèn)監(jiān)聽(tīng)的是編號(hào)最小的那個(gè)網(wǎng)卡穿剖,一般是eth0。在進(jìn)行抓包時(shí)可以通過(guò) -i 參數(shù)指定監(jiān)聽(tīng)的網(wǎng)卡卦溢,any表示監(jiān)聽(tīng)所有網(wǎng)卡
-i?interface
指定監(jiān)聽(tīng)的網(wǎng)卡名稱(chēng)糊余,any表示監(jiān)聽(tīng)所有的網(wǎng)卡
-n
輸出結(jié)果中,不把ip轉(zhuǎn)換成主機(jī)名(默認(rèn)顯示的是主機(jī)名)
-q
快速輸出单寂,只輸出簡(jiǎn)要的數(shù)據(jù)包信息
-r?file
從文件中獲取數(shù)據(jù)包贬芥,不再?gòu)木W(wǎng)絡(luò)獲取數(shù)據(jù)包
-t
不輸出時(shí)間戳
-w?file
將抓取的數(shù)據(jù)包保存到文件,-r 參數(shù)可以從文件中讀取數(shù)據(jù)包
-W?filecount
指定文件的數(shù)量宣决,當(dāng)文件滾動(dòng)到指定數(shù)量后會(huì)從第一個(gè)文件開(kāi)始覆蓋
除了以上參數(shù)蘸劈,還有一些關(guān)鍵字可以用來(lái)進(jìn)行條件過(guò)濾,常用關(guān)鍵字如下
-host
過(guò)濾主機(jī)尊沸,如?tcpdump host 192.168.1.110? 只抓取經(jīng)過(guò)這個(gè)ip的數(shù)據(jù)包
-src
用來(lái)過(guò)濾請(qǐng)求來(lái)源方的參數(shù)威沫,如:tcpdump src host 192.168.1.110?只抓取從這個(gè)ip過(guò)來(lái)的數(shù)據(jù)包
-dst
用來(lái)過(guò)濾請(qǐng)求接收方的參數(shù)贤惯,如:tcpdump dst host 192.168.1.110?只抓取發(fā)送到這個(gè)ip的數(shù)據(jù)包
-port
過(guò)濾端口,如:tcpdump port 8080?只抓取經(jīng)過(guò)8080端口的數(shù)據(jù)包
-net
過(guò)濾網(wǎng)絡(luò)壹甥,如:tcpdump net 192.168 ?只抓取經(jīng)過(guò)這個(gè)網(wǎng)段的數(shù)據(jù)包
-and救巷、not、or
條件過(guò)濾句柠,和字面意思一樣浦译。如:tcpdump net 192.168 and port 8080 ?抓取經(jīng)過(guò)192.168網(wǎng)段并經(jīng)過(guò)8080端口的數(shù)據(jù)包
數(shù)據(jù)包分析
抓取的數(shù)據(jù)包格式如下
20:17:43.496528
時(shí)間戳,時(shí):分:秒.微秒
IP
網(wǎng)際網(wǎng)絡(luò)協(xié)議的名稱(chēng)
180.101.49.12.http > iZbp14w0b2rs7i1400bjjmZ.42468180.101.49.12.http
請(qǐng)求發(fā)送方的ip和端口 >?請(qǐng)求接收方的ip和端口溯职。端口有時(shí)會(huì)顯示為某個(gè)網(wǎng)絡(luò)協(xié)議精盅,如http、ssh谜酒、mysql等
Flags [R]
flag標(biāo)識(shí)和狀態(tài)叹俏,可選的狀態(tài)有:?[S.] [.] [P.] [F.][R]
seq、ack僻族、fin
表示tcp協(xié)議的3次握手和4次揮手的過(guò)程粘驰。seq表示請(qǐng)求的序列號(hào),ack是回答的序列號(hào)述么,fin表示完成蝌数。這里顯示的序列號(hào)是相對(duì)值,-S參數(shù)可以顯示絕對(duì)值
win
表示當(dāng)前窗口的可用大小
length
表示報(bào)文體的長(zhǎng)度度秘,從長(zhǎng)度可以簡(jiǎn)單分析是否正確接收了請(qǐng)求
通過(guò)以上結(jié)果只能做簡(jiǎn)單的分析顶伞,可以使用-w參數(shù)把數(shù)據(jù)包寫(xiě)入文件,文件中記錄的數(shù)據(jù)包比命令行要詳細(xì)的多剑梳。借助分析工具可以對(duì)文件進(jìn)一步分析唆貌,這里推薦使用Wireshark,這個(gè)工具是開(kāi)源的垢乙,開(kāi)箱即用使用簡(jiǎn)單锨咙,這里不做詳細(xì)介紹了
常用的命令組合
抓取8080端口的數(shù)據(jù)包
tcpdump?-ianyport8080
抓取從192.168.1.110發(fā)送到192.168.1.111的數(shù)據(jù)包
tcpdump-ianysrchost192.168.1.110anddsthost192.168.1.111
抓取192.168網(wǎng)段除了192.168.1.110的請(qǐng)求的數(shù)據(jù)包
tcpdump?-ianysrc?net192.168and'src?host?not?192.168.1.110'
抓取8080端口的數(shù)據(jù)包并寫(xiě)入dump.log文件中
tcpdump -i any port 8080 -w dump.log
注意事項(xiàng)
1.tcpdump需要用管理員權(quán)限運(yùn)行,可以用sudo命令或者root用戶
2.抓取的數(shù)據(jù)包通過(guò)length字段只能做一些簡(jiǎn)單的判斷追逮,想要詳細(xì)分析蓖租,需要借助數(shù)據(jù)包分析工具,如:Wireshark