wireshark

wireshark 显示过滤器表达式是根据协议+.+属性来判断的。

基础使用的官方文档

全部的协议属性列表见官方文档

各种协议的wiki 地址

过滤器表达式基本语法

english c-like desc
eq == ip.src=10.0.0.5
ne != ip.src!=10.0.0.5
gt > frame.len>10
lt < frame.len<10
ge >= frame.len>=10
le <= frame.len<=10
contains sip.TO contains "a123"
matches ~ 使用正则,http.host matches "acme.(org|com)"
bitewire_and & 二进制 and 运算结果不为 0, tcp.flags & 0x02

数字值可以使用十进制、八进制、十六进制

1
2
3
ip.len le 1500
ip.len le 02734
ip.len le 0x5dc

布尔类型的值可以使用1(true),0(false)

网络地址可以使用:,.,-分割

1
2
3
4
eth.dst == ff:ff:ff:ff:ff:ff
eth.dst == ff-ff-ff-ff-ff-ff
eth.dst == ffff.ffff.ffff
ip.addr == 192.168.0.1

可以比较字符串

1
2
http.request.uri == "https://www.wireshark.org/"
udp contains 81:60:03

过滤器表达式组合语法

english c-like desc
and && ip.src==10.0.0.5 and tcp.flags.fin
or || ip.src==10.0.0.5 or ip.src=10.0.0.6
xor ^^ tr.src==10.0.0.5 xor tr.dst==10.0.0.5
not ! not tcp
[...] 子序列比较
in 是否在集合中

一些示例

1
2
3
4
5
6
7
8
9
10
eth.src[0:3] == 00:00:83
eth.src[2] == 83

tcp.port in {80 443 8080}
# 等效于
tcp.port == 80 || tcp.port == 443 || tcp.port == 8080

tcp.port in {443 4430..4434}
#不等效于,因为port指代的可能是source,也可能是destination,而下述的每个判断是分别进行的
tcp.port == 443 || (tcp.port >= 4430 && tcp.port <= 4434)