wireshark過濾器語法全面解析

1. 概述

本文全面介紹了wireshark過濾器語法,wireshark包括捕獲過濾器和顯示過濾器,其中顯示過濾器的語法十分豐富,其實顯示過濾器的語法可以簡單概括爲:基本數據類型,協議對象,比較運算符,結合運算符,字符串函數與正則表達式,這就是其所有語法。其中高級的用法也許是切片、集合、正則表達式。

本文重點在於全面的描述其基本語法,通過例子來學習,那些複雜的用法其實都來自這些基本的語法元素,如有不完善之處,歡迎提出建議。

2. 過濾器分類

wireshark包括捕獲過濾器和顯示過濾器

  • 捕獲過濾器:決定將什麼樣的信息記錄在捕捉結果中。需要在開始捕捉前設置。是第一層過濾器,防止日誌過大。
  • 顯示過濾器:在捕捉結果中進行詳細查找。語法與捕獲過濾器不一樣

3. 捕獲過濾器

語法與tcpdump、Windump以及任何使用libpcap庫的程序一樣

這裏我只介紹顯示過濾器,捕獲過濾器在我的另一篇文章寫得很詳細全面介紹Linux下tcpdump的使用

4.顯示過濾器基本數據類型

4.1 無符號整數與有符號整數

可以用10、8、16進製表示

ip.len le 1500  // 10進制
ip.len le 02734 // 8進制
ip.len le 0x5dc // 16進制

4.2 布爾值

協議對象的boolean域爲真當且僅當解碼後有該字段

例:
tcp.flags.syn爲真當且僅當SYN標誌出現在TCP段中

4.3 以太網地址

用冒號(:),句號(.),橫槓(-)分隔,例:

eth.dst == ff:ff:ff:ff:ff:ff
eth.dst == ffff.ffff.ffff
eth.dst == ff-ff-ff-ff-ff-ff

4.4 IPv4地址

ip.addr == 192.168.0.1

或CIDR表示法

ip.addr == 129.111.0.0/16 // 過濾器將查找129.111 B類網絡中的所有數據包

4.5 IPv6地址

ipv6.addr == ::1

4.6文本字符串

http.request.uri == "https://www.wireshark.org/"

sip.To contains "a1762"

http.host matches "acme\.(org|com|net)"

5. 顯示過濾器

5.1 協議對象

protocol.attr.attr

wireshark自帶很多協議解碼器,打開搜索欄>表達式即可看到大量協議

5.2 比較運算符

C風格 英文 描述
== eq
!= ne 官方不推薦在eth.addr, ip.addr, tcp.port, udp.port上使用,因爲有bug
< lt
<= le
> gt
>= ge
contains 協議,字段或偏移包含值,sip.To contains “a1762”
matches ~ 協議或文本符合perl正則語法:http.host matches "acme.(org
bitwise_and & 二進制與,比較二進制的值:tcp.flags & 0x02

5.3 結合運算符

英文格式 C風格 描述
and &&
or ||
xor ^^ 異或
not !
[] 切片(偏移)
in 成員運算符,存在於集合
() 括號內優先級更高

5.3.1 切片

  • n:m n是起始偏移量,m是指定範圍的長度。
eth.src [0:3] == 00:00:83
  • n-m n是起始偏移量,m是結束偏移量
eth.src [1-2] == 00:83
  • :m 相當於0:m,即從序列的開頭到偏移量m
eth.src [:4] == 00:00:83:00
  • n: 從偏移量n到序列末尾
eth.src [4:] == 20:20
  • n 相當於n:1
eth.src [2] == 83
  • 複合範圍:通過逗號分隔將單個範圍串在一起
eth.src [0:3,1-2,:4,4:,2] == 00:00:83:00:83:00:00:83:00:20:20:83

5.3.2 成員運算符(集合)

tcp.port in {80 443 8080}
// 等價於
tcp.port == 80 || tcp.port == 443 || tcp.port == 8080
  • 集合範圍
tcp.port in {443 4430..4434}
// 等價於
tcp.port == 443 || (tcp.port >= 4430 && tcp.port <= 4434)
  • 不僅限於數字,也可以使用其它類型
http.request.method in {"HEAD" "GET"}
ip.addr in {10.0.0.5 .. 10.0.0.9 192.168.1.1..192.168.1.9}
frame.time_delta in {10 .. 10.5}

5.4 字符串函數

函數 介紹
upper 轉換string爲大寫
lower 轉換string爲小寫
len 返回string或字節字段的字節長度,注意是按字節而不是字符(可能多字節)
count 返回字符串在幀(frame)中出現次數
string 將非字符串轉換成字符串

例:

lower(http.server) contains "apache"
len(http.request.uri) > 100

5.5 正則表達式

採用perl的正則表達式語法

ip.dst_host matches "^172\.(1[6-9]|2[0-9]|3[0-1])\..{1,3}\.255"

6. 常見例子

  • 顯示來自10.210網段的封包
ip.src == 10.210.0.0/16	
  • 顯示GET請求
http.request.method == “GET”

7. 附錄

7.1 參考資料

強烈推薦閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章