天天看點

TCPDUMP指令詳細使用方法

抓包工具TCPDUMP

tcpdump采用指令行的方式對接口的資料包進行篩選抓取,其豐富特性在靈活的表達式上,支援針對網絡層、協定、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的資訊

1 tcpdump指令格式

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] 
        [ -s snaplen ] [ -w file ] [ expression ]
           

抓包選項

-c : 指定要抓取的包的數量。注意,是最終要擷取這麼多個包。例如 ,指定“-c 10”将擷取10個包,但可能已經處理了100個包,隻不過隻有10個包是滿足條件的包。

-i interface:指定tcpdump需要監聽的接口。若未指定該選項,将從系統接口清單中搜尋編号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一個符合條件的接口,搜尋馬上結束。可以使用'any'關鍵字表示所有網絡接口。
-n:對位址以數字方式顯式,否則顯式為主機名,也就是說-n選項不做主機名解析。
-nn:除了-n的作用外,還把端口顯示為數值,否則顯示端口服務名。
-N:不列印出host的域名部分。例如tcpdump将會列印'nic'而不是'nic.ddn.mil'。
-P:指定要抓取的包是流入還是流出的包。可以給定的值為"in"、"out"和"inout",預設為"inout"。
-s len:設定tcpdump的資料包抓取長度為len,如果不設定預設将會是65535位元組。對于要抓取的資料包較大時,長度設定不夠可能會産生包截斷,若出現包截斷,輸出行中會出現"[|proto]"的标志(proto實際會顯示為協定名)。但是抓取len越長,包的處理時間越長,并且會減少tcpdump可緩存的資料包的數量,進而會導緻資料包的丢失,是以在能抓取我們想要的包的前提下,抓取長度越小越好。

輸出選項:
-e:輸出的每行中都将包括資料鍊路層頭部資訊,例如源MAC和目标MAC。
-q:快速列印輸出。即列印很少的協定相關資訊,進而輸出行都比較簡短。
-X:輸出包的頭部資料,會以16進制和ASCII兩種方式同時輸出。
-XX:輸出包的頭部資料,會以16進制和ASCII兩種方式同時輸出,更詳細。
-v:當分析和列印的時候,産生詳細的輸出。
-vv:産生比-v更詳細的輸出。
-vvv:産生比-vv更詳細的輸出。

其他功能性選項:
-D:列出可用于抓包的接口。将會列出接口的數值編号和接口名,它們都可以用于"-i"後。
-F:從檔案中讀取抓包的表達式。若使用該選項,則指令行中給定的其他表達式都将失效。
-w:将抓包資料輸出到檔案中而不是标準輸出。可以同時配合"-G time"選項使得輸出檔案每time秒就自動切換到另一個檔案。可通過"-r"選項載入這些檔案以進行分析和列印。
-r:從給定的資料封包件中讀取資料。使用"-"表示從标準輸入中讀取。
           

常用的選項也就這幾個

  • tcpdump -D
  • tcpdump -c num -i int -nn -XX -vvv

2 tcpdump表達式

表達式用于篩選輸出哪些類型的資料包,如果沒有給定表達式,所有的資料包都将輸出,否則隻輸出表達式為true的包。在表達式中出現的shell元字元建議使用單引号包圍。

tcpdump的表達式由一個或多個"單元"組成,每個單元一般包含ID的修飾符和一個ID(數字或名稱)。有三種修飾符:

2.1 type:指定ID的類型

可以給定的值有host/net/port/portrange。例如"host foo","net 128.3","port 20","portrange 6000-6008"。預設的type為host。

2.2 dir:指定ID的方向。

可以給定的值包括src/dst/src or dst/src and dst,預設為src or dst。例如,"src foo"表示源主機為foo的資料包,"dst net 128.3"表示目标網絡為128.3的資料包,"src or dst port 22"表示源或目的端口為22的資料包。

2.3 proto:通過給定協定限定比對的資料包類型

常用的協定有tcp/udp/arp/ip/ether/icmp等,若未給定協定類型,則比對所有可能的類型。例如"tcp port 21","udp portrange 7000-7009"。

是以,一個基本的表達式單元格式為"proto dir type ID"

TCPDUMP指令詳細使用方法

除了使用修飾符和ID組成的表達式單元,還有關鍵字表達式單元:gateway,broadcast,less,greater以及算術表達式。

表達式單元之間可以使用操作符" and / && / or / || / not / ! "進行連接配接,進而組成複雜的條件表達式。如"host foo and not port ftp and not port ftp-data",這表示篩選的資料包要滿足"主機為foo且端口不是ftp(端口21)和ftp-data(端口20)的包",常用端口和名字的對應關系可在linux系統中的/etc/service檔案中找到。

另外,同樣的修飾符可省略,如"tcp dst port ftp or ftp-data or domain"與"tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain"意義相同,都表示包的協定為tcp且目的端口為ftp或ftp-data或domain(端口53)。

使用括号"()"可以改變表達式的優先級,但需要注意的是括号會被shell解釋,是以應該使用反斜線""轉義為"()",在需要的時候,還需要包圍在引号中。

3 tcpdump示例

注意:tcpdump隻能抓取流經本機的資料包

3.1 預設啟動

~]# tcpdump 
           

預設情況下,直接啟動tcpdump将監視第一個網絡接口(非lo口)上所有流通的資料包。這樣抓取的結果會非常多,滾動非常快。

3.2 監視指定網絡接口的資料包

~]# tcpdump -i eth1
           

如果不指定網卡,預設tcpdump隻會監視第一個網絡接口,如eth0

3.3 監視指定主機的資料包,例如所有進入或離開swyer的資料包

~]# tcpdump host swyer
           

3.4 列印helios<-->hot或helios<-->ace之間通信的資料包

~]# tcpdump host helios and \( hot or ace \)
           

3.5 列印ace與任何其他主機之間通信的IP資料包,但不包括與helios之間的資料包

~]# tcpdump ip host ace and not helios
           

3.6 截獲主機hostname發送的所有資料

~]# tcpdump ip host hostname
           

3.7 監視所有發送到主機hostname的資料包

~]# tcpdump dst host hostname
           

3.8 監視指定主機和端口的資料包

~]# tcpdump tcp port 22 and host hostname
           

3.9 對本機的udp 123端口進行監視(123為ntp的服務端口)

~]# tcpdump udp port 123
           

3.10 監視指定網絡的資料包,如本機與192.168網段通信的資料包,"-c 10"表示隻抓取10個包

~]# tcpdump -c 10 net 192.168
           

3.11 列印所有通過網關snup的ftp資料包(注意,表達式被單引号括起來了,這可以防止shell對其中的括号進行錯誤解析)

~]# tcpdump 'gateway snup and (port ftp or ftp-data)'
           

3.12 抓取ping包

[root@centos8 ~]# tcpdump -c3 -nn -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:48:13.627787 IP 10.0.0.183 > 10.0.0.184: ICMP echo request, id 1737, seq 6, length 64
22:48:13.627831 IP 10.0.0.184 > 10.0.0.183: ICMP echo reply, id 1737, seq 6, length 64
22:48:14.652041 IP 10.0.0.183 > 10.0.0.184: ICMP echo request, id 1737, seq 7, length 64
3 packets captured
4 packets received by filter
0 packets dropped by kernel
[root@centos8 ~]# 

           

如果明确要抓取主機為10.0.0.183對本機的ping,則使用and操作符。

[root@centos8 ~]# tcpdump -c5 -nn -i eth0 icmp and src 10.0.0.183
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:49:59.100573 IP 10.0.0.183 > 10.0.0.184: ICMP echo request, id 1737, seq 109, length 64
22:50:00.124582 IP 10.0.0.183 > 10.0.0.184: ICMP echo request, id 1737, seq 110, length 64
22:50:01.147798 IP 10.0.0.183 > 10.0.0.184: ICMP echo request, id 1737, seq 111, length 64
22:50:02.171980 IP 10.0.0.183 > 10.0.0.184: ICMP echo request, id 1737, seq 112, length 64
22:50:03.195656 IP 10.0.0.183 > 10.0.0.184: ICMP echo request, id 1737, seq 113, length 64
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[root@centos8 ~]# 

           

注意不能直接寫icmp src 10.0.0.183,因為icmp協定不支援直接應用host這個type.

[root@centos8 ~]# tcpdump -c10 -nn -i eth0 tcp dst port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:52:25.031206 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 1288421461, win 2080, options [nop,nop,TS val 223277842 ecr 2946659996], length 0
22:52:25.072123 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 213, win 2079, options [nop,nop,TS val 223277883 ecr 2946660026], length 0
22:52:25.113670 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 409, win 2078, options [nop,nop,TS val 223277925 ecr 2946660066], length 0
22:52:25.154176 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 605, win 2078, options [nop,nop,TS val 223277965 ecr 2946660108], length 0
22:52:25.195686 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 801, win 2077, options [nop,nop,TS val 223278007 ecr 2946660148], length 0
22:52:25.236633 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 997, win 2076, options [nop,nop,TS val 223278048 ecr 2946660190], length 0
22:52:25.277641 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 1193, win 2081, options [nop,nop,TS val 223278089 ecr 2946660231], length 0
22:52:25.318183 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 1389, win 2080, options [nop,nop,TS val 223278129 ecr 2946660272], length 0
22:52:25.359247 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 1585, win 2079, options [nop,nop,TS val 223278170 ecr 2946660313], length 0
22:52:25.400592 IP 10.0.0.1.51666 > 10.0.0.184.22: Flags [.], ack 1781, win 2079, options [nop,nop,TS val 223278212 ecr 2946660354], length 0
10 packets captured
10 packets received by filter
0 packets dropped by kernel
[root@centos8 ~]# 

           
[root@centos8 ~]# tcpdump -c2 -q -XX -vvv -nn -i eth0 tcp dst port 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:53:49.220338 IP (tos 0x0, ttl 64, id 28890, offset 0, flags [DF], proto TCP (6), length 52)
    10.0.0.1.51666 > 10.0.0.184.22: tcp 0
	0x0000:  000c 2990 e13f 0050 56c0 0008 0800 4500  ..)..?.PV.....E.
	0x0010:  0034 70da 4000 4006 b531 0a00 0001 0a00  .4p.@[email protected]......
	0x0020:  00b8 c9d2 0016 7573 e368 4ccb d831 8010  ......us.hL..1..
	0x0030:  081f 59c4 0000 0101 080a 0d50 3bef afa3  ..Y........P;...
	0x0040:  bf7c                                     .|
22:53:49.220794 IP (tos 0x0, ttl 64, id 28891, offset 0, flags [DF], proto TCP (6), length 52)
    10.0.0.1.51666 > 10.0.0.184.22: tcp 0
	0x0000:  000c 2990 e13f 0050 56c0 0008 0800 4500  ..)..?.PV.....E.
	0x0010:  0034 70db 4000 4006 b530 0a00 0001 0a00  .4p.@[email protected]......
	0x0020:  00b8 c9d2 0016 7573 e368 4ccb da79 8010  ......us.hL..y..
	0x0030:  081d 5762 0000 0101 080a 0d50 3bf0 afa3  ..Wb.......P;...
	0x0040:  bf97                                     ..
2 packets captured
2 packets received by filter
0 packets dropped by kernel
[root@centos8 ~]# 

           

繼續閱讀