速查表怎么用
这份速查把最常用的显示过滤语句按意图归类:按主机、按连接、按异常标志、按应用层与传输层异常。用法是「先想清楚要查什么,再抄对应的语句」,而不是从头背语法。几类语句覆盖了现场绝大多数场景:会话过滤把一次交互单独拿出来,异常标记过滤用来快速判断连接是否健康,应用层过滤用来核对请求与响应内容,时间间隔过滤用来发现异常的等待。
基本信息
| 适用平台 | 图形化抓包工具及其命令行版本(命令行以 -Y 传入显示过滤器) |
|---|---|
| 语法风格 | 字段、运算符、值;与抓包阶段的主机端口表达式完全不同 |
| 常用字段族 | 地址类、端口类、标志位类、分析类、协议字段类 |
| 分析类字段 | 由工具推算得出,结论要结合抓包点位置理解 |
| 保存复用 | 常用语句可存为书签,现场只需修改地址与端口 |
典型使用场景
- 排查某台主机的访问问题:先按地址与端口筛出相关会话
- 判断连接是否健康:只看异常标记类报文,几秒内看清状况
- 核对服务端错误:按响应状态码筛出失败请求,统计比例
- 定位解析问题:按域名子串筛出相关查询与应答
- 发现异常等待:按相邻帧时间间隔过滤,找出卡顿点
高频过滤器
高频过滤器
ip.addr == 10.0.0.5 && tcp.port == 443 # 某主机上的某端口流量
tcp.stream eq 12 # 单条会话,N 从包详情里取
tcp.analysis.flags && !tcp.analysis.window_update # 异常标记,排除正常窗口更新
tcp.flags.syn == 1 && tcp.flags.ack == 0 # 纯 SYN,看握手是否发出
http.response.code >= 500 # 服务端错误响应
http.request.method == "POST" # 某类请求方法
dns.flags.rcode != 0 # 解析异常应答
icmp.type == 3 # 不可达类差错报文
frame.time_delta_displayed > 0.5 # 相邻显示帧间隔大于 500 毫秒意图与过滤器
| 查什么 | 过滤器 |
|---|---|
| 某条连接 | tcp.stream eq N |
| 含异常标记的包 | tcp.analysis.flags |
| 服务端错误响应 | http.response.code >= 500 |
| 某域名的加密握手 | tls.handshake.extensions_server_name |
| 解析错误应答 | dns.flags.rcode != 0 |
| 相邻帧间隔异常 | frame.time_delta_displayed > 0.5 |
| 不可达差错报文 | icmp.type == 3 |
| 复位与握手异常 | tcp.flags.reset == 1 || (tcp.flags.syn == 1 && tcp.flags.ack == 0) |
组合与排除技巧
| 技巧 | 写法 | 说明 |
|---|---|---|
| 排除噪声协议 | !(arp || stp) | 把广播类噪声一次屏蔽,专注目标流量 |
| 限定方向 | ip.src == X && ip.dst == Y | 只看单向流量,避免方向混淆 |
| 限定载荷 | tcp.len > 0 | 排除纯确认报文,只看携带数据的帧 |
| 组合条件加括号 | A && (B || C) | 括号决定优先级,避免条件互相吞掉 |
分析类字段是工具根据序号与确认号推算的结论,不是协议里的字段:抓包点不同,同一现象可能得到不同标记。对外下结论时要把抓包位置一并说明。
时间间隔类过滤要区分「相邻显示帧」与「相邻帧」:前者只计算当前过滤结果中的相邻帧间隔,跨连接分析时更符合直觉,后者容易被无关帧干扰。
组合思路
- 先按会话收窄:从一次交互的报文里取会话编号,再做单会话分析
- 再按方向细分:同一会话里只看一个方向,判断谁在发什么
- 异常优先看:重传、复位、重复确认三类标记先扫一遍
- 应用层核对:按状态码与请求方法过滤,确认请求与响应是否符合预期
- 时间维度补充:按相邻帧间隔过滤,找出异常的等待点
- 排除噪声:把广播类协议一次屏蔽,避免列表被无关流量淹没
现场排查建议把过滤条件与结论一起记录:当时用了什么条件、筛出了什么、据此下了什么判断。隔天复盘时条件比结论更重要,同一组条件重跑一遍就能验证结论是否仍然成立。