本文已参与「新人创作礼」活动,一起开启创作之路。

背景

活到老,学到老,每天进步一点点。

有点记不清楚这个过滤技巧,是学自哪了,可能是国外某个大神的案例视频,也有可能是 Wireshark SharkFest 大会上的分享视频,总之这个过滤技巧真的是绝,谁用谁知道。

万能格式如下:

a == ${a}

实例

本实例数据包如下,包含有两条 TCP Stream 0 和 1 。

Wireshark 提示和技巧 | a == ${a} 显示过滤宏

正常来说,我们分析某个数据包文件时,可能会存在有多条 TCP 流或者 UDP 流(wireshark 中定义说法)。当需要根据某条流做具体内容分析时,一般也有两种方式:

  1. TCP Stream Num 方式
tcp.stream == 1

Wireshark 提示和技巧 | a == ${a} 显示过滤宏

  1. 追踪流方式

Wireshark 提示和技巧 | a == ${a} 显示过滤宏

然后就是本文要重点介绍的方式了,a == ${a} ,当然具体到本实例,实际表达式为:

tcp.stream == ${tcp.stream}

Wireshark 提示和技巧 | a == ${a} 显示过滤宏

该方式在数据包列表中任意点选某条 TCP Stream 中的一个数据包后,通过应用 tcp.stream == ${tcp.stream} 显示过滤表达式后,即可过滤出整条 TCP Stream。

当然每次在显示过滤器栏中输入 tcp.stream == ${tcp.stream} ,肯定要比输入 tcp.stream == 0 Num 的方式要麻烦,但是可以结合过滤器按钮用啊, 天作之合不是 。

使用方式完整如下,一图胜千言

Wireshark 提示和技巧 | a == ${a} 显示过滤宏

扩展

当然,一直在强调是万能格式, 你想怎么扩展使用都可以,简单举例如下

  1. 以太网类型过滤
eth.type == ${eth.type}
eth.type != ${eth.type}

譬如快速过滤是或非 ARP、IPv4 等数据包。

  1. IP 地址过滤
ip.src == ${ip.src}
ip.dst == ${ip.dst}
ip.addr == ${ip.src}
ip.addr == ${ip.dst}

根据 IP 源或目的地址快速过滤。

注:由于 IP 地址存在多个字段值,ip.addr == x.x.x.x 实际是表示匹配指定源或目的 IP 的数据包,但 ip.addr== ${ip.addr} 无法使用,因为实际上是没有 ip.addr 字段的 。

  1. 会话过滤
(ip.src == ${ip.src} and ip.dst == ${ip.dst}) or (ip.src == ${ip.dst} and ip.dst == ${ip.src})

Wireshark 提示和技巧 | a == ${a} 显示过滤宏

  1. IP ID 过滤
ip.id == ${ip.id}

快速查找重复 IP ID 的数据包。

学会了嘛?