1. 程式人生 > >Wireshark的兩種過濾器與BPF過濾規則

Wireshark的兩種過濾器與BPF過濾規則

Wirshark使用的關鍵就在於過濾出想要的資料包,下面介紹怎麼過濾。


抓包過濾器

Wirshark有兩種過濾器,一個是抓包過濾器,一個是顯示過濾器,他們之間的區別在於抓包過濾器只抓取你設定的規則,同時丟棄其他資訊,顯示過濾器並不會丟棄資訊,只是將不符合規則的資料隱藏起來而已。有時候一旦資料包被丟棄,這些資料包就無法在恢復回來。還有一個區別就是,捕捉過濾器必須在開始捕捉前設定完畢,這一點跟顯示過濾器是不同的。

兩種過濾器的目的也是不同的:
捕捉過濾器是資料經過的第一層過濾器,它用於控制捕捉資料的數量,以避免產生過大的日誌檔案。
顯示過濾器是一種更為強大(複雜)的過濾器。它允許您在日誌檔案中迅速準確地找到所需要的記錄。

說完區別,他們也是有共同點的,就是都遵循BPF語法。看到這裡,你可能大概就能知道wireshark的套路了,想用好他,熟練的使用BPF是關鍵,下面只是介紹了兩種過濾的流程,跟著步驟,誰都能完成特定的效果。但是給你一個新任務,你是否能快速過濾出想要的資料包呢?

使用演示

  1. 新增一條自定義的抓包規則

  2. 選擇自定義的抓包規則

技巧_只抓協議頭部引數的抓包過濾器

先看一個ICMP協議發包的特徵,

  1. 發包

  2. 分析
    你會發現每一條資料包的這個位置都是00

  3. 解釋
    知道協議的頭部都是固定這個特徵之後,我們就能完成一個根據協議頭部欄位的引數來自定義抓包過濾器,建立這類抓包過濾器的語法為:

proto[offset:size(optional)]=value

語法對應的示意圖:

icmp[0:1]=0

這樣就完成了一個只抓取ICMP響應的抓包過濾器規則,我實驗過了,只能抓包ICMP的包。

  1. 常用只抓協議頭的抓包過濾器規則
抓包過濾器規則 描述
icmp[0]=0 ICMP響應包
icmp[0:1]=8 ICMP請求包
icmp[0:1]=3、icmp[13]=2 ICMP目的主機不可達資料包,僅抓取TCP SYN標記的資料包
icmp[13]=18 僅抓取TCP SYN/ACK標記的資料包
icmp[13]=32 僅抓取TCP URG標記設定資料包

抓包過濾器語法規則解釋

語法規則圖示:

名詞解釋:

  • Protocol(協議)
    常用值: etherfddiiparprarpdecnetlatscamoprcmopdltcp and udp
    如果沒有特別指明是什麼協議,則預設使用所有支援的協議。

  • Direction(方向)
    常用值: srcdstsrc and dstsrc or dst
    如果沒有特別指明來源或目的地,則預設使用 "src or dst" 作為關鍵字。
    例如:

"host 10.2.2.2" 與 "src or dst host 10.2.2.2" 相同 
  • Host(s):
    常用值: netporthost portrange
    如果沒有指定此值,則預設使用"host"關鍵字。
    例如:
"src 10.1.1.1" 與 "src host 10.1.1.1" 相同
  • Logical Operations(邏輯運算):
    常用值值:notandor
    否("not")具有最高的優先順序。或("or")和與("and")具有相同的優先順序,運算時從左至右進行。
    例如:
"not tcp port 3128 and tcp port 23" 與 "(not tcp port 3128) and tcp port 23" 相同
"not tcp port 3128 and tcp port 23" 與 "not (tcp port 3128 and tcp port 23)" 不同

常見的抓包過濾器BPF

來源或目的地是指定地址的包
host 192.168.0.123
host www.taobao.com


範圍內的包
net 192.168.0.0/24
or
net 192.168.0.0 mask 255.255.255.0


抓取目的地是某範圍的包
dst net 192.168.0.0/24
or
dst net 192.168.0.0 mask 255.255.255.0


抓取來源是某範圍的包
src net 192.168.0.0/24
or
src net 192.168.0.0 mask 255.255.255.0


僅抓取DNS(埠是53)的包
port 53
tcp dst port 3128
顯示目的TCP埠為3128的封包。

ip src host 10.1.1.1
顯示來源IP地址為10.1.1.1的封包。

host 10.1.2.3
顯示目的或來源IP地址為10.1.2.3的封包。

src portrange 2000-2500
顯示來源為UDP或TCP,並且埠號在2000至2500範圍內的封包。

not imcp
顯示除了icmp以外的所有封包。(icmp通常被ping工具使用)

src host 10.7.2.12 and not dst net 10.200.0.0/16
顯示來源IP地址為10.7.2.12,但目的地不是10.200.0.0/16的封包。

(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
顯示來源IP為10.4.1.12或者來源網路為10.6.0.0/16,目的地TCP埠號在200至10000之間,並且目的位於網路10.0.0.0/8內的所有封包。

顯示過濾器

使用演示

在這裡輸入過濾語法,必須正確才會顯示綠色。

顯示過濾器語法規則解釋

語法圖示:

名詞解釋:

  • Protocol(協議)
    您可以使用大量位於OSI模型第2至7層的協議。(wireshark支援的協議介紹 https://www.wireshark.org/docs/dfref/)
    常用值: IPTCPDNSSSH

  • String1, String2 (可選項)
    協議的子類。
    點選相關父類旁的"+"號,然後選擇其子類

  • Comparison operators (比較運算子)
    可以使用6種比較運算子

  • Logical expressions(邏輯運算子)

    舉例:
    "tcp.dstport 80 xor tcp.dstport 1025"
    只有當目的TCP埠為80或者來源於埠1025(但又不能同時滿足這兩點)時,這樣的封包才會被顯示。

常見的顯示過濾器BPF

只顯示本地發出去的包
ip.src==192.168.8.60


過濾從某地址發出的請求
ip.src==192.168.8.60


過濾傳送到某地址的請求
ip.dst==192.168.8.60


過濾http協議
http


過濾某地址
http.request.uri=="/projectname/a.html"


過濾全地址(它與uri的區別是,包含host)
http.request.full_uri=="www.mydomain.com/projectname/a.html"
snmp || dns || icmp	顯示SNMP或DNS或ICMP封包。
ip.addr == 10.1.1.1
顯示來源或目的IP地址為10.1.1.1的封包。

ip.src != 10.1.2.3 or ip.dst != 10.4.5.6
顯示來源不為10.1.2.3或者目的不為10.4.5.6的封包。
換句話說,顯示的封包將會為:
來源IP:除了10.1.2.3以外任意;目的IP:任意
以及
來源IP:任意;目的IP:除了10.4.5.6以外任意

ip.src != 10.1.2.3 and ip.dst != 10.4.5.6
顯示來源不為10.1.2.3並且目的IP不為10.4.5.6的封包。
換句話說,顯示的封包將會為:
來源IP:除了10.1.2.3以外任意;同時須滿足,目的IP:除了10.4.5.6以外任意

tcp.port == 25	顯示來源或目的TCP埠號為25的封包。
tcp.dstport == 25	顯示目的TCP埠號為25的封包。
tcp.flags	顯示包含TCP標誌的封包。
tcp.flags.syn == 0x02	顯示包含TCP SYN標誌的封包。

Find文字匹配器

流量面板文字搜尋

ctr + f 彈出搜尋框

並且支援這幾種匹配模式

Stream文字搜尋


這裡只支援普通的文字搜尋;


總結_注意事項

  • 寫表示式時關鍵字要轉義
當使用關鍵字作為值時,需使用反斜槓“\”
"ether proto \ip" (與關鍵字"ip"相同).
這樣寫將會以IP協議作為目標。

"ip proto \icmp" (與關鍵字"icmp"相同).
這樣寫將會以ping工具常用的icmp作為目標。

可以在"ip"或"ether"後面使用"multicast"及"broadcast"關鍵字。
當您想排除廣播請求時,"no broadcast"就會非常有用。
  • 輔助生存表示式
    mac os版開啟的方式

    把所有協議的引數選項,可用符號都列舉出來了,對於一些陌生協議來說,是個好輔助工具。

參考

https://biot.com/capstats/bpf.html
https://wiki.wireshark.org/CaptureFilters
https://openmaniak.com/cn/wireshark_filters.php
https://staight.github.io/2018/07/25/BPF過濾規則/