技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 服務(wù)器類 >

Linux系統(tǒng)抓包命令tcpdump使用實(shí)例

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2018-06-20 06:12┆點(diǎn)擊:

  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系統(tǒng)抓包命令tcpdump使用實(shí)例 三聯(lián)

  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了。