tcpdump是linux命令行下常用的的一個(gè)抓包工具,記錄一下平時(shí)常用的方式,測(cè)試機(jī)器系統(tǒng)是ubuntu 12.04。
tcpdump的命令格式
tcpdump的參數(shù)眾多,通過(guò)man tcpdump可以查看tcpdump的詳細(xì)說(shuō)明,這邊只列一些筆者自己常用的參數(shù):
tcpdump [-i 網(wǎng)卡] -nnAX '表達(dá)式'
各參數(shù)說(shuō)明如下:
-i:interface 監(jiān)聽的網(wǎng)卡。
-nn:表示以ip和port的方式顯示來(lái)源主機(jī)和目的主機(jī),而不是用主機(jī)名和服務(wù)。
-A:以ascii的方式顯示數(shù)據(jù)包,抓取web數(shù)據(jù)時(shí)很有用。
-X:數(shù)據(jù)包將會(huì)以16進(jìn)制和ascii的方式顯示。
表達(dá)式:表達(dá)式有很多種,常見的有:host 主機(jī);port 端口;src host 發(fā)包主機(jī);dst host 收包主機(jī)。多個(gè)條件可以用and、or組合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。
下面進(jìn)行一些命令測(cè)試,如果沒有權(quán)限,可以先切換成root用戶。
監(jiān)聽網(wǎng)卡eth0
$ tcpdump -i eth0
這個(gè)方式最簡(jiǎn)單了,但是用處不多,因?yàn)榛旧现荒芸吹綌?shù)據(jù)包的信息刷屏,壓根看不清,可以使用ctrl+c中斷退出,如果真有需求,可以將輸出內(nèi)容重定向到一個(gè)文件,這樣也更方便查看。
監(jiān)聽指定協(xié)議的數(shù)據(jù)
$ tcpdump -i eth0 -nn 'icmp'
這個(gè)是用來(lái)監(jiān)聽icmp協(xié)議的數(shù)據(jù),就是ping命令使用的協(xié)議。類似的,如果要監(jiān)聽tcp或者是udp協(xié)議,只需要修改上例的icmp就可以了。ping下監(jiān)聽的機(jī)器,輸出如下:
linux使用tcpdump抓包示例
每一行的各個(gè)數(shù)據(jù)表示的含義:
抓到包的時(shí)間 IP 發(fā)包的主機(jī)和端口 > 接收的主機(jī)和端口 數(shù)據(jù)包內(nèi)容
監(jiān)聽指定的主機(jī)
$ tcpdump -i eth0 -nn 'host 192.168.1.231'
這樣的話,192.168.1.231這臺(tái)主機(jī)接收到的包和發(fā)送的包都會(huì)被抓取。
$ tcpdump -i eth0 -nn 'src host 192.168.1.231'
這樣只有192.168.1.231這臺(tái)主機(jī)發(fā)送的包才會(huì)被抓取。
$ tcpdump -i eth0 -nn 'dst host 192.168.1.231'
這樣只有192.168.1.231這臺(tái)主機(jī)接收到的包才會(huì)被抓取。
監(jiān)聽指定端口
$ tcpdump -i eth0 -nnA 'port 80'
上例是用來(lái)監(jiān)聽主機(jī)的80端口收到和發(fā)送的所有數(shù)據(jù)包,結(jié)合-A參數(shù),在web開發(fā)中,真是非常有用。
監(jiān)聽指定主機(jī)和端口
$ tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231'
多個(gè)條件可以用and,or連接。上例表示監(jiān)聽192.168.1.231主機(jī)通過(guò)80端口發(fā)送的數(shù)據(jù)包。
監(jiān)聽除某個(gè)端口外的其它端口
$ tcpdump -i eth0 -nnA '!port 22'
如果需要排除某個(gè)端口或者主機(jī),可以使用“!”符號(hào),上例表示監(jiān)聽非22端口的數(shù)據(jù)包。
小結(jié):
tcpdump這個(gè)功能參數(shù)很多,表達(dá)式的選項(xiàng)也非常多,非常強(qiáng)大,不過(guò)常用的功能確實(shí)不多。詳情可以通過(guò)man查看系統(tǒng)手冊(cè)。
另外在抓取web包的時(shí)候,發(fā)送網(wǎng)頁(yè)內(nèi)容都是很奇怪的字符,發(fā)現(xiàn)是apache開啟了gzip壓縮的緣故,關(guān)閉掉gzip壓縮就可以了。在ubuntu 12.04下,編輯vim /etc/apache2/mods-enabled/deflate.load文件,將加載模塊deflate_module的語(yǔ)句注釋掉,然后重啟apache就OK了。