首页/网络/抓包与流量分析速查/Wireshark 显示过滤器基础
Wireshark 技巧75 条

Wireshark 显示过滤器基础

显示过滤器按协议字段名写布尔表达式,作用于已抓到的报文:可反复改条件不重抓,是 Wireshark 分析的核心操作。

显示过滤器是什么

显示过滤器是 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.rcodeDNS 查询名与响应码判断解析失败是域名不存在还是服务端拒绝
frame.time_relative相对首包的秒数与业务日志时间对齐,切出问题发生的时间窗
同一字段出现多次时可以简写,如 tcp.srcport == 80 || tcp.dstport == 80;但不同协议族的字段必须各自写全,混写容易得到非法表达式。

与捕获过滤器分工

  • 现场抓包阶段用捕获过滤器限流,代价是丢掉的报文事后找不回,写条件要保守
  • 分析阶段全部交给显示过滤器,同一份文件可以换十几种条件反复切片
  • 交接时把显示过滤器表达式写进工单,别人照着输入就能复现你的视图
  • 把常用表达式存成过滤器按钮,长期巡检时省掉每次重记字段名的成本

易错点

  • 把 BPF 语法(port 443、host 10.0.0.9)直接填进显示过滤器会报语法错,两套语法不通用
  • 显示过滤器只影响显示与统计,不影响文件内容;抓包阶段用捕获过滤器丢掉的报文事后无法找回
  • 布尔组合的优先级不完全符合直觉,多条件混用 or 与 and 时显式加括号最稳
  • 过滤后做会话统计要勾选 Limit to display filter,否则统计的仍是整个文件

数据来源与参考

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌