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

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


抓包過濾器

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

兩種過濾器的目的也是不一樣的:
捕捉過濾器是數據通過的第一層過濾器,它用於控制捕捉數據的數量,以免產生過大的日誌文件。
顯示過濾器是一種更爲強大(複雜)的過濾器。它容許您在日誌文件中迅速準確地找到所須要的記錄。git

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

使用演示

  1. 添加一條自定義的抓包規則
    express

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

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

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

  1. 發包
    tcp

  2. 分析
    你會發現每一條數據包的這個位置都是00
    工具

  3. 解釋
    知道協議的頭部都是固定這個特徵以後,咱們就能完成一個根據協議頭部字段的參數來自定義抓包過濾器,建立這類抓包過濾器的語法爲:3d

proto[offset:size(optional)]=value

語法對應的示意圖:

icmp[0:1]=0

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

  1. 經常使用只抓協議頭的抓包過濾器規則
抓包過濾器規則 描述
icmp[0]=0 ICMP響應包
icmp[0:1]=8 ICMP請求包
icmp[0:1]=三、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過濾規則/

相關文章
相關標籤/搜索