Appearance
Appearance
显示过滤器(Display Filter)用于在 Wireshark 中筛选已经捕获到的数据包。
它不会改变抓包过程,也不会减小抓包文件大小;它只决定当前数据包列表里显示哪些包。抓包完成后,你可以随时修改显示过滤器来从不同角度查看同一份抓包文件。
关键判断:显示过滤器用于“抓包后筛选显示内容”;捕获过滤器用于“抓包前决定抓哪些包”。
两者语法不同,不能混用。
| 对比项 | 显示过滤器 | 捕获过滤器 |
|---|---|---|
| 使用阶段 | 抓包之后 | 抓包之前 |
| 作用 | 在已抓到的数据包中筛选显示内容 | 决定哪些数据包会被抓取 |
| 典型语法 | tcp.port == 80 | tcp port 80 |
| 是否影响抓包文件大小 | 不影响 | 会影响 |
| 是否可以随时修改 | 可以 | 抓包开始后不能直接修改 |
如果你的目标是“已经抓到了很多包,现在只想看其中一部分”,使用显示过滤器。
如果你的目标是“从一开始就只抓某类流量,减少文件大小和无关数据”,使用捕获过滤器。
只显示 ICMP 流量:
icmp只显示 SMTP(端口 25)或 ICMP 流量:
tcp.port == 25 or icmp只显示 80 端口相关的 TCP 流量:
tcp.port == 80只显示与某个 IP 相关的流量:
ip.addr == 192.168.1.10只显示局域网 192.168.x.x 内部通信,不包括互联网流量:
ip.src == 192.168.0.0/16 and ip.dst == 192.168.0.0/16排除与某个 IP 相关的所有流量:
not ip.addr == 10.43.54.65也可以写成:
!(ip.addr == 10.43.54.65)按协议过滤,同时排除某个 IP:
sip and ip.src != xxx.xxx.xxx.xxx and ip.dst != xxx.xxx.xxx.xxx这类数据包通常表示接收端暂时无法继续接收数据:
tcp.window_size == 0 and tcp.flags.reset != 1观察 Windows 客户端与域控交互时,可以先关注这些常见协议:
smb or nbns or dcerpc or nbss or dns匹配 UDP payload 开头处的 3 字节序列 0x81 0x60 0x03。这里跳过了 8 字节 UDP header:
udp[8:3] == 81:60:03如果要在 UDP header 或 payload 的任意位置查找同一组字节,可以使用 contains:
udp contains 81:60:03例如只显示来自 DELL 设备的流量:
eth.addr[0:3] == 00:06:5B匹配 SIP To header 中包含 a1762 的数据包:
sip.To contains "a1762"matches(也可写作 ~)可以在字符串字段和字节序列中使用正则表达式。下面的例子匹配 URI 以 gl=se 结尾的 HTTP 请求:
http.request.uri matches "gl=se$"这里 $ 是正则表达式中的“字符串结尾”标记。
在 Wireshark 4.0+ 中,如果一个数据包里有多层同名字段,可以使用 layer operator 指定第几层。例如一个 GRE 数据包同时包含外层和内层 IPv4 地址:
ip.src#1 == 10.1.2.3匹配外层源地址。
ip.src#2 == 10.1.2.3匹配内层源地址。
ip.src == 10.1.2.3匹配任意一层出现的该源地址。
ip.addr != x.x.x.x 可能不是你想要的结果 某些过滤字段会同时匹配多个协议字段。例如:
ip.addr == 10.43.54.65等价于:
ip.src == 10.43.54.65 or ip.dst == 10.43.54.65因此,如果你想排除所有发往或来自 10.43.54.65 的流量,不建议写成:
ip.addr != 10.43.54.65更清楚的写法是对整个匹配条件取反:
not ip.addr == 10.43.54.65也就是:
!(ip.src == 10.43.54.65 or ip.dst == 10.43.54.65)类似情况也可能出现在 tcp.port、udp.port、eth.addr 等会同时匹配多个字段实例的过滤条件中。遇到“排除条件不符合预期”时,优先检查是否需要对整个表达式取反。
Imported from https://wiki.wireshark.org/DisplayFilters on 2020-08-11 23:13:34 UTC