字节切片过滤是什么
Wireshark 支持用「字段[偏移:长度]」的语法读取任意位置的字节值:可以取帧头部的前两字节判断报文类型,也可以读取载荷开头的几个字节识别自定义协议。当协议解析不出来时它尤其有用——绕过解析器直接按字节位置比对。
基本信息
| 适用工具 | Wireshark 3.x / 4.x |
|---|---|
| 语法 | 字段[开始:长度] == 0x… |
| 省略长度 | 只写偏移表示取一个字节 |
| 常用对象 | frame、ip、tcp.payload 等字段 |
| 注意 | 偏移从该字段自身起点开始计算 |
典型使用场景
- 识别解析器未支持的自定义协议报文
- 按报文头部的类型字段筛出特定消息
- 核对加密流量中的明文头部(如记录类型)
- 在验证新协议实现时比对字段编码
- 排查分片或封装导致的字段错位
常用示例
常用示例
frame[0:2] == 0x0800 # 帧类型为 IPv4
tcp.payload[0] == 0x16 # 载荷首字节(握手记录类型)
udp[8:4] == 0x00:00:00:00 # UDP 载荷前四字节
ip[9] == 6 # IP 协议号为 TCP写法与用途
| 写法 | 读取内容 | 用途 |
|---|---|---|
| frame[0:2] | 帧头部前两字节 | 判断上层协议类型 |
| ip[9] | IP 协议号字段 | 确认承载协议 |
| tcp.payload[0] | 载荷首字节 | 识别自定义协议 |
| udp[8:4] | 载荷前四字节 | 核对自定义报文头 |
偏移写错时过滤器会静默返回空结果,建议先在小样本上验证再用于大文件。
切片只能作用在已解析字段上,字段未解析或位置被改变时结果不可靠,必要时改用整帧原始字节。
补充要点
- 先用解析视图确认目标字节的偏移,再写表达式,可避免反复试错
- 对二进制自定义协议,用十六进制写法比字符串写法更清晰
- 把切片条件与端口条件组合,能快速定位某类自定义报文
- 字段长度可变时(如带选项)偏移会变化,需要格外小心
切片表达式适合精确定位,不确定结构时先用详情区的字节视图观察再下笔。
对自定义协议,先用详情区的字节视图确认目标位置再写切片表达式,可以避免大量试错。