范围与集合写法
显示过滤器支持数值区间与集合两种紧凑写法:字段 in {80, 443, 8080} 表示属于集合,字段 in [1-1023] 或用 >= 与 <= 组合表示连续区间。比起把一串相等判断用 or 连起来,这两种写法更短、也更不容易写错,筛端口段、包长段、帧号段时尤其顺手。
基本信息
| 适用平台 | Wireshark 显示过滤器;方括号简写自 4.x 起支持 |
|---|---|
| 集合写法 | 字段 in {v1, v2, v3} |
| 区间写法 | 字段 >= a && 字段 <= b,或 字段 in [a-b] |
| 适用字段 | 端口、包长、帧编号等可比较字段 |
典型使用场景
- 筛多个服务端口:tcp.port in {80, 443, 8080} 一次覆盖几个服务
- 找知名端口流量:tcp.dstport in [1-1023] 看系统服务端口上的交互
- 按包长筛选:tcp.len in [1400-1460] 找接近满 MSS 的数据包
- 按帧号定位:frame.number in [100-200] 只看某一段交互
- 与其他条件组合:先框端口集合,再叠加 URI 或状态码条件
常用示例
常用示例
tcp.port in {80, 443, 8080} # 端口属于该集合
tcp.dstport in [1-1023] # 目的端口落在知名端口区间
tcp.len in [1400-1460] # 数据长度接近满 MSS
frame.number in [100-200] # 只看第 100 到第 200 帧
ip.ttl >= 1 && ip.ttl <= 64 # 全版本通用的区间写法写法对照
| 写法 | 含义 | 兼容性 |
|---|---|---|
| tcp.port in {80, 443} | 属于该集合 | 各版本均可用 |
| tcp.port in [1-1023] | 落在闭区间内 | 较新版本更顺手,旧版用比较运算符 |
| ip.ttl >= 1 && ip.ttl <= 64 | 等价的区间表达 | 全版本可用 |
| tcp.port == 80 || tcp.port == 443 | 等价的集合表达 | 全版本可用但冗长 |
集合与区间只对可比较的数值字段有意义。对字符串字段用 in 需要写成多个相等判断,或者干脆改用 matches 做正则匹配。
端口范围要区分传输层协议:tcp.port in [1-1023] 不会命中任何 UDP 流量。同时关心两种协议时,显式写一条 udp.port 条件更清楚。
IPv6 抓包里同样是范围条件,但地址类字段要换成 ipv6.addr 一类名称。混有 IPv4 与 IPv6 的抓包按地址段筛选时,通常需要分别写两条条件再取并集。
集合里只能写常量,不能拿另一个字段来做比较。需要「两个字段相等」这类判断时要用比较表达式,或者改用 matches 正则,别把字段名当成值写进集合。