WireShark過濾器總結
WireShark 提供兩種過濾器,分別是捕獲過濾器和顯示過濾器。捕獲過濾器是進行包捕獲時進行過濾,只捕獲過濾規則之內的資料包。而顯示過濾器是在捕獲資料包之後,只顯示過濾規則之內的資料包。
捕獲過濾器:
捕獲過濾器應用於Winpcap,使用Berkeley Packet Filter(BPF)語法。使用BPF建立的過濾器稱為表示式,通常一個表示式由一個或多個原語以及零個及以上操作符組成。一個原語往往由一個或多個限定詞然後跟一個ID名字或數字組成。一個表示式樣例如下:
BPF限定詞:
限定詞 | 說明 | 例子 |
Type | 指出名字或數字所代表意義 | host、net、port |
Dir | 指明是源還是目的 | src、dst |
Proto | 指明協議 | ip、tcp、udp、ftp |
邏輯操作符:
連線運算子 and &&
選擇運算子 or ||
否定運算子 not !
下面詳細說明一下各種型別的過濾器。
(1)主機名和地址過濾器
我們可以設定規則根據裝置的MAC地址、IPv4地址、IPv6地址或者DNS主機名進行過濾。
舉例如下:
如果想捕獲與某IPv4地址192.168.3.4相關的所有資料包,可設定如下過濾器:
host 192.168.3.4
如果想捕獲與某IPv6地址2001::7334相關的所有資料包,可設定如下過濾器:
host 2001::7334
如果想捕獲與某主機名mrbuffoon相關的所有資料包,可設定如下過濾器:
host mrbuffoon
一臺主機IP地址可能會變,所以有時需要進行MAC地址過濾,可以設定過濾器:
ether host 00-11-22-33-44-55
想捕獲來自某臺主機的流量:
src host 192.168.3.4
想捕獲目的地址為某主機的流量:
dst host 192.168.3.4
note:如果沒有顯式指定Type型別,則預設為host。
(2)埠過濾器
舉例:
只過濾8080埠流量:
port 8080
(3)協議過濾器
舉例:
只捕獲icmp協議的資料包
icmp
(4)協議域過濾器
我們可以檢查資料包協議頭的每一位元組來建立基於這些特殊資料的過濾器。
比如我們想基於ICMP的型別域進行過濾,我們通過icmp[a]指定我們想要檢查的位元組偏移量,這裡就是開頭偏移量為a的位元組。icmp[0]==3表示我們捕獲代表目標不可達(型別3)的ICMP報文。
我們還可以用icmp[a:b]這種形式表示我們要檢查偏移為a開始的b個位元組,例如icmp[0:2]==0x0301表示我們要捕獲型別3程式碼1即目標不可達,主機不可達的ICMP報文。
有時候,我們不是要檢查某一個位元組,而是檢查某一個位元組中的某一位,比如基於tcp協議。這時候我們可以採用tcp[a]&b這種形式。常見形式如下:
tcp[13]&32==32 設定了URG位的TCP資料包
tcp[13]&16==16 設定了ACK位的TCP資料包
tcp[13]&8==8 設定了PSH位的TCP資料包
tcp[13]&4==4 設定了RST位的TCP資料包
tcp[13]&2==2 設定了SYN位的TCP資料包
tcp[13]&1==1 設定了FIN位的TCP資料包
tcp[13]==18 TCP SYN-ACK資料包
(5)高階語法過濾器
WireShark還提供比較操作符==,!=,<=,>=,<,>等。比較操作符可以讓你進行值得比較。舉例:只捕獲長度小於128位元組的資料包 frame.len<128