用于减少抓取的报文体积,使用 BPF 语法,功能相对有限。Berkeley Packet Filter,在设备驱动级别提供抓包过滤接口,多数抓包工具都支持此语法
- primitives 原语:由名称或数字,以及描述它的多个限定词组成
- qualifiers 限定词
- type:设置数字或者名称所指示类型,例如: host www.baidu.com
- host 主机名
- port 端口
- net 设定子网,net 192.168.0.0 mask 255.255.255.0 等价于 net 192.168.0.0/24
- portrange,设置端口范围,例如 portrange 6000-8000
- dir:设置网络出入方向,例如: dst port 80
- src、dst、src or dst、src and dst
- ra、ta、addr1、addr2、addr3、addr4(仅对 IEEE 802.11 Wireless LAN 有效)
- proto:指定协议类型,例如: udp
- ether、fddi、tr、 wlan、 ip、 ip6、 arp、 rarp、 decnet、 tcp、udp、icmp、igmp、icmp、 igrp、pim、ah、esp、vrrp
- 其他
- gateway:指明网关 IP 地址,等价于 ether host ehost and not host host
- broadcast:广播报文,例如 ether broadcast 或者 ip broadcast
- multicast:多播报文,例如 ip multicast 或者 ip6 multicast
- less, greater:小于或者大于
- type:设置数字或者名称所指示类型,例如: host www.baidu.com
- qualifiers 限定词
- 原语运算符
- 与:&& 或者 and
- 或:|| 或者 or
- 非:! 或者 not
- 例如:src or dst && tcp or ip6
对已经抓取到的报文过滤显示,功能强大
任何在报文细节面板中解析出的字段名,都可以作为过滤属性
- 在视图->内部->支持的协议面板里,可以看到各字段名对应的属性名
- 例如,在报文细节面板中 TCP 协议头中的 Source Port,对应着过滤属性为 tcp.srcport
英文 | 符号 | 描述及示例 |
---|---|---|
eq | == | 等于. ip.src==10.0.0.5 |
ne | != | 不等于. ip.src!=10.0.0.5 |
gt | > | 大于. frame.len > 10 |
lt | < | 小于. frame.len < 128 |
ge | >= | 大于等于. frame.len ge 0x100 |
le | <= | 小于等于. frame.len le 0x20 |
contains | 包含. sip.To contains "a1762 | |
matches | ~ | 正则匹配.host matches "acme.(org |
bitwise_and | & | 位与操作. tcp.flags & 0x02 |
- Unsigned integer:无符号整型,例如 ip.len le 1500
- Signed integer:有符号整型
- Boolean:布尔值,例如 tcp.flags.syn
- Ethernet address:以:、-或者.分隔的 6 字节地址,例如 eth.dst == ff:ff:ff:ff:ff:ff
- IPv4 address:例如 ip.addr == 192.168.0.1
- IPv6 address:例如 ipv6.addr == ::1
- Text string:例如 http.request.uri == "https://www.wireshark.org/"
英文 | 符号 | 意义及示例 |
---|---|---|
and | && | AND 逻辑与. ip.src==10.0.0.5 and tcp.flags.fin |
or | ||
xor | ^^ | XOR 逻辑异或. tr.dst[0:3] == 0.6.29 tr.src[0:3] == 0.6.29 |
not | ! | NOT 逻辑非. not llc |
[…] | 见 Slice 切片操作符. | |
in | 见集合操作符 |
-
大括号{}集合操作符
- 例如 tcp.port in {443 4430..4434} ,实际等价于 tcp.port == 443 || (tcp.port >= 4430 && tcp.port ⇐ 4434)
-
中括号[]Slice 切片操作符
- [n:m]表示 n 是起始偏移量,m 是切片长度
- eth.src[0:3] == 00:00:83
- [n-m]表示 n 是起始偏移量,m 是截止偏移量
- eth.src[1-2] == 00:83
- [:m]表示从开始处至 m 截止偏移量
- eth.src[:4] == 00:00:83:00
- [m:]表示 m 是起始偏移量,至字段结尾
- eth.src[4:] == 20:20
- [m]表示取偏移量 m 处的字节
- 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
- [n:m]表示 n 是起始偏移量,m 是切片长度