显示过滤器是什么
显示过滤器是 Wireshark 在报文已经抓进内存之后使用的筛选机制,用协议字段名写布尔表达式,只改变显示哪些包。字段体系来自 Wireshark 自己的协议解析器,如 ip.addr、tcp.port、http.response.code。因为它和抓包阶段的 BPF 语法完全不是一套东西,很多人在两者之间混用语法而报错。数据始终留在文件里,所以改条件不需重新抓包,这是把一个问题从粗到细切开的基础。
基本信息
| 入口 | 主窗口顶部显示过滤器栏(也可 Ctrl+/ 聚焦) |
|---|---|
| 语法 | 字段 运算符 值;布尔用 and/&&、or/||、not/! |
| 状态颜色 | 绿色合法、黄色可用但有疑问、红色语法错误 |
| 生效范围 | 当前文件全部报文,可用 limit to display filter 限制统计 |
| 命令行对应 | tshark -Y '表达式'(-Y 即显示过滤器) |
典型使用场景
- 从几百兆的抓包里只留一台主机的流量:ip.addr == 10.0.0.9
- 盯住一条连接从头看到尾:tcp.stream == 12
- 筛服务端错误响应:http.response.code >= 500
- 找传输异常:tcp.analysis.flags 一次列出全部 TCP 分析标注
- 排除干扰噪音:!arp && !icmp && !stp 让输出只剩业务流量
常用示例
常用示例
ip.addr == 10.0.0.9 # 网络层任一方向命中该地址
tcp.port == 443 && tcp.flags.syn == 1 # 443 上的建连报文
tcp.stream == 12 # 只看编号 12 的那条 TCP 流
http.response.code >= 500 # 服务端 5xx 响应
http.request.method == "POST" # 只看 POST 请求
dns.qry.name contains "example.com" # 域名包含匹配
tcp.analysis.retransmission # 只看被标注为重传的包
!(arp || icmp || stp) # 排除二三层噪音写法与常见错误
| 写法 | 含义 | 容易踩的地方 |
|---|---|---|
| ip.addr == 10.0.0.9 | 匹配网络层任一方向的该地址 | 写成单等号会被提示,虽能运行但风格不统一 |
| tcp.port == 443 | 按 TCP 端口匹配 | QUIC 走 UDP 443,必须另写 udp.port == 443 |
| tcp.flags.syn == 1 | 出现过 SYN 即命中,含 SYN-ACK | 只看建连请求要补 && tcp.flags.ack == 0 |
| http.request.method == "POST" | HTTP 请求方法精确匹配 | HTTPS 与 HTTP/2 流量里没有该字段 |
| dns.qry.name contains "example" | 域名子串匹配 | contains 区分大小写 |
字段名记不住时,选中一个包在详情区展开协议树,右键任意字段选「作为过滤器应用 → 选中」,Wireshark 会自动生成表达式,比背字段名高效得多。
表达式显示红色表示语法不合法,不要直接回车硬上,状态栏会指出错误位置。复杂表达式先在小文件上验证再放到大文件上跑,避免长时间无响应。
组合与集合写法
组合与集合写法
ip.src == 10.0.0.9 && ip.dst == 10.0.0.10 # 只看单向 A→B
tcp.port in {80, 443, 8080} # 端口集合写法
tcp.stream == 5 && (tcp.analysis.flags) # 单条流内的异常
frame.time_relative > 10 && frame.time_relative < 20 # 时间窗口切片高频字段速查
| 字段 | 含义 | 典型用途 |
|---|---|---|
| ip.addr 与 ip.src / ip.dst | 网络层地址,带方向限定 | 锁定某台主机或某个网段的全部往来流量 |
| tcp.port 与 tcp.srcport / tcp.dstport | 传输层端口,带方向限定 | 查某个服务端口上的连接是否建立、是否有重传 |
| tcp.stream | 这条 TCP 会话的编号 | 把一条连接的全部报文单独拎出来逐包分析 |
| tcp.analysis 系列 | 分析引擎自动打上的异常标注 | 快速找出重传、乱序、零窗口等传输层异常 |
| http.request 与 http.response 系列 | 明文 HTTP 的请求与响应字段 | 筛方法、状态码、主机名与 URI,定位应用层错误 |
| dns.qry.name 与 dns.flags.rcode | DNS 查询名与响应码 | 判断解析失败是域名不存在还是服务端拒绝 |
| frame.time_relative | 相对首包的秒数 | 与业务日志时间对齐,切出问题发生的时间窗 |
同一字段出现多次时可以简写,如 tcp.srcport == 80 || tcp.dstport == 80;但不同协议族的字段必须各自写全,混写容易得到非法表达式。
与捕获过滤器分工
- 现场抓包阶段用捕获过滤器限流,代价是丢掉的报文事后找不回,写条件要保守
- 分析阶段全部交给显示过滤器,同一份文件可以换十几种条件反复切片
- 交接时把显示过滤器表达式写进工单,别人照着输入就能复现你的视图
- 把常用表达式存成过滤器按钮,长期巡检时省掉每次重记字段名的成本