用戶必須有root權限才可運行tcpdump
-w file: 將抓包存入指定的文件。
-r file: 從指定的文件讀入報文(由-w選項保存而成),而不是抓取網卡上的報文
-c count:指定抓取count個報文後停止,否則一直抓下去,用戶可通過Ctrl-C終止
-e:將二層報文頭也解析出來。默認情況下,只從IP頭開始解析,增加此選項後會將報
文的二層頭也解析出來。
-F:抓包的過濾條件從指定的文件中讀取
-D:列出可抓取的網卡的列表,如下面的例子有三個網卡
[p01056@localhost ~]$ sudo /usr/sbin/tcpdump -D
1.eth3
2.any (Pseudo-device that captures on all interfaces)
3.lo
-i interface:抓取指定的網卡上的報文,參數就是-D中列出的那些接口。
如果不指定該參數,將選取link-up狀態的編號最小的網卡抓取(除環回接口外)
例如,下面就是抓取lo接口上的報文(自己ping自己的報文)
[p01056@localhost ~]$ sudo /usr/sbin/tcpdump -i 3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
15:37:24.266382 IP 10.153.107.75 > 10.153.107.75: ICMP echo request, id
13934, seq 1, length 64
15:37:24.266434 IP 10.153.107.75 > 10.153.107.75: ICMP echo reply, id 13934,
seq 1, length 64
-n:不將主機地址轉換成dns名稱
-nn:不將協議號和端口號轉換成名稱
不加-nn
15:43:37.223798 IP 10.153.107.72.tsdos390 > 10.153.107.75.ssh: . ack 441 win
62371
加-nn
15:43:45.936130 IP 10.153.107.72.1237 > 10.153.107.75.22: P 1:53(52) ack
4294955024 win 64467
-q:快速輸出模式,輸出較少的協議信息。
-S:打印tcp序號的絕對值,而不是相對序號。
-t:不打印時間戳
-ttt:打印和前一個報文的時間差
-v:打印verbose信息
-vv:打印更多的verbose信息
-vvv:打印更更多的verbose信息
-x:以16進制的形式打印,不含二層頭
-xx:以16進制的形式打印,包含二層頭
-X:以16進制打印,同時輸出ASCII碼,不含二層頭
-XX:以16進制打印,同時輸出ASCII碼,包含二層頭
過濾條件:放在命令的最後
由一個或多個限定符加上id(名稱或數字)構成。
限定符有三類:
type:指明id的類型,如host,net,port,portrange等
dir:指明id的傳送方向,如src/dst/src or dst/src and dst
proto:指明協議類型,例如ether,ip,arp等。
例如:
ether dst ehost
ether dst 68:b5:99:79:17:b2 : 目的mac = 68:b5:99:79:17:b2
ip src 10.153.107.73 : 源IP = 10.153.107.73
tcp dst port 22 : tcp目的端口號 = 22 (ssh)
多個簡單過濾條件可以用and,or連接成一個符合過濾條件。如:ip src
10.153.107.79 && tcp dst port 22
sudo /usr/sbin/tcpdump -e -c 10 ip src 10.153.107.79 && tcp dst port 22