tcpdump
tcpdump可以將網絡中傳輸的數據包捕獲下來提供分析。它支持針對主機、網絡、協議或端口的過濾,並提供and、or和not等邏輯語句來去掉無用的信息。
語法
tcpdump [OPTIONS] [expression]
常用OPTIONS
-c count:指定要捕獲數據包的數量。
-D:顯示可捕獲數據包的接口列表。列表會顯示一個數字和接口名,可用於-i項選指定要捕獲數據包的接口。
-F file:使用文件作爲篩選器表達式的輸入。在命令行上給出的附加表達式將被忽略。
-i interface:指定要捕獲數據包的接口。
-n:不要將主機地址轉換爲名稱。這可以用來避免DNS查找。
-nn:在-n的基礎上,也不要將協議和端口號等轉換爲名稱。
-#:在行首顯示數據包編號。
-Q direction:選擇捕獲數據包的方向。值爲in、out和inout。並非所有平臺都可用。
-q:快速輸出。顯示較少的協議信息,以便縮短輸出行。
-r file:從文件中讀取數據包。如file爲-,則使用標準輸入。
-v:生成詳細的數據包信息。使用-w選項寫入文件時,每隔10秒報告捕獲的數據包數。
-V file:從文件中讀取文件名列表。如file爲-,則使用標準輸入。
-w file:將原始數據包定入文件,而不是解析並顯示出來,通常使用.cap爲擴展名。以後可以使用-r選項顯示它們。如file爲-,則使用標準輸出。
expression
expression由一個或多個基元組成的過濾器表達式。基元通常由id(名稱或數字)組成,前面有一個或多個限定符。
有三種不同的限定符:
type
type限定符指定引用的是什麼類型的id。如未指定type,則假定爲host。
常用type
host:指定要過濾的主機,host可爲ip或主機名。
例:host 192.168.1.1
net:指定要過濾的網絡,可只寫網絡號部分,net可爲網絡號或來自網絡數據庫(/etc/networks等)的名稱。
例:net 192.168.1
port:指定要過濾的端口,port可使用數字或/etc/services中的對應的名稱。
例:port 22
portrange:指定要過濾的端口範圍。
例:protrange 20-22
dir
dir限定符指定id的特定傳輸方向,需要和type或proto一起使用。如未指定dir,則假定爲src or dst。
常用dir
src:針對數據包的源信息進行過濾。
例:src 192.168.1.1
dst:針對數據包的目標信息進行過濾。
例:dst net 192.168.1
src or dst:針對數據包的源或目標信息進行過濾。
例:src or dst port 22
src and dst:針對數據包的源和目標信息進行過濾。
例:src 192.168.1.1 and dst port 22
proto
proto限定符將匹配限制爲特定協議。如未指定proto,則假定爲所有協議。
常用proto
ether:對以太網幀中的協議進行過濾。常見協議有ip,arp,rarp,stp和ipx等,協議要用\進行轉義。
例:ether proto \ip
ip:對ip包中的協議進行過濾。常見協議有icmp,igrp,vrrp,udp和tcp等,協議要用\進行轉義。
例:ip proto \icmp
也可以直接指定過濾上述某個協議。
例:tcpdump -i ens33 icmp
tcpdump -i ens33 tcp
通過使用單詞and、or和not組合基元來構建更復雜的過濾器。如:
host foo and not port ftp and not port ftp-data
表示捕獲源或目標主機爲foo的所有數據包,但不包含源或目標端口爲ftp和ftp-dat的數據包。
使用基元組合時,可以省略相同的限定符列表。例:
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的所有數據包。
示例
捕獲10個經過網卡接口ens33的所有數據包,並且顯示爲IP和端口,而不是主機名和協議。
tcpdump -i ens33 -c 10 -nn
捕獲經過網卡接口ens33,源地址爲192.168.1.1,端口範圍1-1000的所有數據包。
tcpdump -i ens33 src host 192.168.1.1 and portrange 1-1000
捕獲經過網卡接口ens33,目標網絡爲192.168.1.0,TCP端口爲22的所有數據包。
tcpdump -i ens33 dst net 192.168.1 and tcp port 22
捕獲經過網卡接口ens33的所有ARP數據包。
tcpdump -i ens33 arp