显示过滤器是什么
显示过滤器作用在已经抓到的数据上:它不丢弃任何报文,只决定列表里显示哪些帧,因此改条件不需要重新抓包。它和抓包阶段的捕获过滤器是两套完全不同的语法——捕获过滤器写的是 libpcap 风格的主机与端口表达式,显示过滤器写的是「字段、运算符、值」这样的比较式,把前者填进后者的输入框只会立刻报红。显示过滤器的字段用点号分层命名,左边是协议、右边是字段,记住几个高频字段就能覆盖绝大多数排障场景。
基本信息
| 适用平台 | 图形化抓包工具及其命令行版本(命令行用 -Y 指定显示过滤器) |
|---|---|
| 作用范围 | 只影响显示,不改变已抓到文件里的内容 |
| 语法结构 | 字段、运算符、值;值里含空格或特殊字符时用双引号包起来 |
| 常用字段 | ip.addr、ip.src、tcp.port、tcp.flags、http.request.uri、dns.qry.name |
| 与捕获过滤器的区别 | 捕获过滤器在抓包时生效、语法更接近命令行工具;显示过滤器在抓包后生效 |
典型使用场景
- 从海量报文里筛出与某台主机、某个端口相关的流量
- 只看异常报文:复位、重传、重复确认,快速判断连接是否健康
- 按应用层协议筛选:只看某个请求方法、某个状态码或某个域名的解析
- 排除干扰协议,把无关流量一次屏蔽掉,专注目标会话
- 配合命令行版本批量执行同一套过滤条件,做成可复用的分析脚本
过滤器示例
过滤器示例
ip.addr == 10.0.0.5 # 源或目的为该地址
tcp.port == 443 # 源或目的端口为 443
tcp.flags.reset == 1 # 只看复位报文
http.request.method == "POST" # 只看某类请求
http.response.code >= 500 # 只看服务端错误响应
dns.qry.name contains "example.com" # 按域名子串匹配
tcp.analysis.retransmission # 只看重传
ip.addr == 10.0.0.5 && !(arp || stp) # 组合条件并排除广播类噪声高频字段与含义
| 字段 | 含义 | 使用注意 |
|---|---|---|
| ip.addr | 源或目的地址 | 同时匹配两个方向,只看一侧要用 ip.src 或 ip.dst |
| tcp.port | 源或目的端口 | 与 ip.addr 组合时注意写法,避免条件过宽 |
| tcp.flags.reset | 复位标志 | 值为 1 表示该标志被置位 |
| tcp.analysis.retransmission | 分析层标记的重传 | 基于分析而非协议字段,结论要结合抓包点 |
| http.request.method | 请求方法 | 需要抓到的是可解码的明文请求 |
| dns.qry.name | 查询的域名 | 排查解析问题的入口字段 |
运算符
| 运算符 | 用途 |
|---|---|
| == != > < >= <= | 数值与字符串比较 |
| contains | 子串匹配,区分大小写 |
| matches | 正则匹配 |
| && || ! | 与、或、非(也可写 and or not) |
| in {a b c} | 集合匹配,一次比较多个值 |
端口字段同时匹配源与目的端口:只关心服务端方向时用目的端口字段,只关心客户端方向时用源端口字段。判断方向时要先确认抓包点在链路中的位置,以抓包点的视角为准。
过滤器输入框支持保存常用语句:把高频条件存下来,现场排查只需改地址和端口。命令行版本可以用参数直接传入同一套条件,把手工排查沉淀成可重复执行的检查。
写法习惯
- 先宽后窄:先按地址或端口把范围收拢,再看结果里的异常,然后逐条叠加条件
- 出现空列表时逐条去掉条件,确认是哪一条把结果全部排除
- 字段名可以边输边看补全提示,拼错的字段会被当成未知协议直接报错
- 复杂表达式先拆成两三条分别验证,再合并成一条完整条件
- 把验证通过的语句存成书签,现场只改地址与端口即可复用