Linux系统抓包命令tcpdump使用实例
tcpdump是linux命令行下常用的的一個(gè)抓包工具,記錄一下平時(shí)常用的方式,測(cè)試機(jī)器系統(tǒng)是ubuntu 12.04。
tcpdump的命令格式
tcpdump的參數(shù)眾多,通過man tcpdump可以查看tcpdump的詳細(xì)說明,這邊只列一些筆者自己常用的參數(shù):
tcpdump?[-i?網(wǎng)卡]?-nnAX?'表達(dá)式'
各參數(shù)說明如下:
-i:interface 監(jiān)聽的網(wǎng)卡。
-nn:表示以ip和port的方式顯示來源主機(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è)方式最簡單了,但是用處不多,因?yàn)榛旧现荒芸吹綌?shù)據(jù)包的信息刷屏,壓根看不清,可以使用ctrl+c中斷退出,如果真有需求,可以將輸出內(nèi)容重定向到一個(gè)文件,這樣也更方便查看。
監(jiān)聽指定協(xié)議的數(shù)據(jù)
$?tcpdump?-i?eth0?-nn?'icmp'
這個(gè)是用來監(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'
上例是用來監(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ī)通過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)大,不過常用的功能確實(shí)不多。詳情可以通過man查看系統(tǒng)手冊(cè)。
另外在抓取web包的時(shí)候,發(fā)送網(wǎng)頁內(nèi)容都是很奇怪的字符,發(fā)現(xiàn)是apache開啟了gzip壓縮的緣故,關(guān)閉掉gzip壓縮就可以了。在ubuntu 12.04下,編輯vim /etc/apache2/mods-enabled/deflate.load文件,將加載模塊deflate_module的語句注釋掉,然后重啟apache就OK了。
--------------------------------------------------------------------------------------------------------
tcpdump采用命令行方式,它的命令格式為:
??? tcpdump[ -adeflnNOpqStvx ] [ -c 數(shù)量 ] [ -F 文件名 ]
[ -i 網(wǎng)絡(luò)接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 類型 ] [ -w 文件名 ] [表達(dá)式 ]
?????????? -a 將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字;
-d 將匹配信息包的代碼以人們能夠理解的匯編格式給出;
-dd 將匹配信息包的代碼以c語言程序段的格式給出;
-ddd 將匹配信息包的代碼以十進(jìn)制的形式給出;
-e 在輸出行打印出數(shù)據(jù)鏈路層的頭部信息;
-f 將外部的Internet地址以數(shù)字的形式打印出來;
-l 使標(biāo)準(zhǔn)輸出變?yōu)榫彌_行形式;
-n 不把網(wǎng)絡(luò)地址轉(zhuǎn)換成名字;
-t 在輸出的每一行不打印時(shí)間戳;
-v 輸出一個(gè)稍微詳細(xì)的信息,例如在ip包中可以包括ttl和服務(wù)類型的信息;
-vv 輸出詳細(xì)的報(bào)文信息;
-c 在收到指定的包的數(shù)目后,tcpdump就會(huì)停止;
-F 從指定的文件中讀取表達(dá)式,忽略其它的表達(dá)式;
-i 指定監(jiān)聽的網(wǎng)絡(luò)接口;
-r 從指定的文件中讀取包(這些包一般通過-w選項(xiàng)產(chǎn)生);
-w 直接將包寫入文件中,并不分析和打印出來;
-T 將監(jiān)聽到的包直接解釋為指定的類型的報(bào)文,常見的類型有rpc (遠(yuǎn)程過程調(diào)用)和snmp(簡單網(wǎng)絡(luò)管理協(xié)議;)
示例:
1、如果要抓eth0的包,命令格式如下:
tcpdump -i eth0 -w /tmp/eth0.cap
2、如果要抓192.168.1.20的包,命令格式如下:
tcpdump -i etho host 192.168.1.20 -w /tmp/temp.cap
3、如果要抓192.168.1.20的ICMP包,命令格式如下:
tcpdump -i etho host 192.168.1.20 and icmp?-w /tmp/icmp.cap
4、如果要抓192.168.1.20的除端口10000,10001,10002以外的其它包,命令格式如下:
tcpdump -i etho host 192.168.1.20 and ! port 10000 and ! port 10001 and ! port 10002 -w /tmp/port.cap
5、假如要抓vlan 1的包,命令格式如下:
tcpdump -i eth0 port 80 and vlan 1 -w /tmp/vlan.cap
6、假如要抓pppoe的密碼,命令格式如下:
tcpdump -i eht0 pppoes -w /tmp/pppoe.cap
7、假如要抓eth0的包,抓到10000個(gè)包后退出,命令格式如下:
tcpdump -i eth0 -c 10000 -w /tmp/temp.cap
8、在后臺(tái)抓eth0在80端口的包,命令格式如下:
nohup tcpdump -i eth0 port 80 -w /tmp/temp.cap &
轉(zhuǎn)載于:https://blog.51cto.com/960302601/1658972
總結(jié)
以上是生活随笔為你收集整理的Linux系统抓包命令tcpdump使用实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 傻瓜式图文教你在linux下搭建VNC服
- 下一篇: RAII实现的mutex资源类