Ubuntu默認是安裝好了tcpdump工具的,若是沒有安裝的話使用sudo apt-get install tcpdump便可安裝。
(若是遇到tcpdump: no suitable device found的問題,檢查一下是否是在用root權限運行tcpdump,tcpdump只能在root權限下工做)
安裝好tcpdump以後,運行tcpdump:
1. tcpdump -D 獲取網絡適配器列表,如下是在Ubuntu上獲取到的結果:
root@holmesian-laptop:~# tcpdump -D
1.eth0
2.wlan0
3.usbmon1 (USB bus number 1)
4.usbmon2 (USB bus number 2)
5.usbmon3 (USB bus number 3)
6.usbmon4 (USB bus number 4)
7.usbmon5 (USB bus number 5)
8.any (Pseudo-device that captures on all interfaces)
9.lo
2. tcpdump -i <須要監控的網絡適配器編號>,例如我想監控個人無線網卡wlan0,則使用tcpdump -i 2。
root@holmesian-laptop:~# tcpdump -i 2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes
21:24:14.578430 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0x78 > 00:1f:3a:18:fa:06 (oui Unknown) Unknown DSAP 0xd8 Information, send seq 0, rcv seq 16, Flags [Command], length 70
21:24:14.578447 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0x78 > 00:1f:3a:18:fa:06 (oui Unknown) Unknown DSAP 0xd8 Information, send seq 0, rcv seq 16, Flags [Command], length 223
21:24:14.995603 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0x20 > 78:dd:08:d1:b2:ca (oui Unknown) Unknown DSAP 0x76 Information, send seq 0, rcv seq 16, Flags [Command], length 70
21:24:15.019811 00:24:f9:05:78:00 (oui Unknown) Unknown SSAP 0xa6 > 2c:81:58:ec:9c:54 (oui Unknown) Unknown DSAP 0x0a Information, send seq 0, rcv seq 16, Flags [Command], length 72
若是不使用-i來定義監控適配器的話,默認使用列表中的第一個;
3. 使用無線網卡wlan0監控IP地址爲172.16.86.111上443端口的tcp協議:
tcpdump -i 2 host 172.16.86.111 and tcp port 443
4. 若是想要顯示數據包的內容,須要使用-X參數,如,我想要顯示捕獲的https數據包http header的內容:
tcpdump -X -i 2 host 172.16.86.111 and tcp port 443
顯示結果以下:
21:27:53.662741 IP holmesian-laptop.local.44239 > 172.16.86.111.https: Flags [S], seq 24296623, win 5840, options [mss 1460,sackOK,TS val 153804 ecr 0,nop,wscale 6], length 0
0x0000: 4500 003c e463 4000 4006 514a ac10 567e E..<.c@.@.QJ..V~
0x0010: ac10 566f accf 01bb 0172 bcaf 0000 0000 ..Vo.....r......
0x0020: a002 16d0 66a8 0000 0204 05b4 0402 080a ....f...........
0x0030: 0002 58cc 0000 0000 0103 0306 ..X.........
21:27:56.660488 IP holmesian-laptop.local.44239 > 172.16.86.111.https: Flags [S], seq 24296623, win 5840, options [mss 1460,sackOK,TS val 154554 ecr 0,nop,wscale 6], length 0
0x0000: 4500 003c e464 4000 4006 5149 ac10 567e E..<.d@.@.QI..V~
0x0010: ac10 566f accf 01bb 0172 bcaf 0000 0000 ..Vo.....r......
0x0020: a002 16d0 63ba 0000 0204 05b4 0402 080a ....c...........
0x0030: 0002 5bba 0000 0000 0103 0306 ..[.........express
.c
能夠看到該結果只顯示了https頭的一部分,沒有顯示全,是由於tcpdump默認將顯示的數據長度截斷了,能夠使用-s後面加數據長度,來設置數據顯示長度:
tcpdump -X -s 0 -i 2 host 172.16.86.111 and tcp port 443
以上的例子中,-s 0 表示自動設置長度使其可以顯示全部數據。
5. 捕獲的數據太多,不斷刷屏,可能須要將數據內容記錄到文件裏,須要使用-w參數:
tcpdump -X -s 0 -w aaa host 192.9.200.59 and tcp port 8000
則將以前顯示在屏幕中的內容,寫入tcpdump可執行文件同級目錄下的aaa文件中。
文件查看方式以下,須要使用-r參數:
tcpdump -X -s 0 -i 2 -r holmesian host 172.16.86.111 and tcp port 443
若是這樣寫:
tcpdump -r holmesian
則只能看到最簡單的數據傳輸交互過程,看不到數據包內容,查看時也須要使用相應的參數。
6.總結
總結一下,tcpdump的參數分兩個部分,選項(Options)和表達式(expression):
root@holmesian-laptop:~# tcpdump -h網絡
tcpdump version 4.0.0
libpcap version 1.0.0
Usage: tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -M secret ] [ -r file ]
[ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]
[ -y datalinktype ] [ -z command ] [ -Z user ]
[ expression ]tcp