Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

显示过滤器

显示过滤器(Display Filter)用于在 Wireshark 中筛选已经捕获到的数据包。

它不会改变抓包过程,也不会减小抓包文件大小;它只决定当前数据包列表里显示哪些包。抓包完成后,你可以随时修改显示过滤器来从不同角度查看同一份抓包文件。

先分清:显示过滤器不是捕获过滤器

关键判断:显示过滤器用于“抓包后筛选显示内容”;捕获过滤器用于“抓包前决定抓哪些包”。

两者语法不同,不能混用。

对比项显示过滤器捕获过滤器
使用阶段抓包之后抓包之前
作用在已抓到的数据包中筛选显示内容决定哪些数据包会被抓取
典型语法tcp.port == 80tcp port 80
是否影响抓包文件大小不影响会影响
是否可以随时修改可以抓包开始后不能直接修改

如果你的目标是“已经抓到了很多包,现在只想看其中一部分”,使用显示过滤器。
如果你的目标是“从一开始就只抓某类流量,减少文件大小和无关数据”,使用捕获过滤器。

快速示例

按协议筛选

只显示 ICMP 流量:

text
icmp

只显示 SMTP(端口 25)或 ICMP 流量:

text
tcp.port == 25 or icmp

按端口筛选

只显示 80 端口相关的 TCP 流量:

text
tcp.port == 80

按 IP 筛选

只显示与某个 IP 相关的流量:

text
ip.addr == 192.168.1.10

只显示局域网 192.168.x.x 内部通信,不包括互联网流量:

text
ip.src == 192.168.0.0/16 and ip.dst == 192.168.0.0/16

排除条件

排除与某个 IP 相关的所有流量:

text
not ip.addr == 10.43.54.65

也可以写成:

text
!(ip.addr == 10.43.54.65)

组合多个条件

按协议过滤,同时排除某个 IP:

text
sip and ip.src != xxx.xxx.xxx.xxx and ip.dst != xxx.xxx.xxx.xxx

进阶用法

检查 TCP 窗口为 0 的数据包

这类数据包通常表示接收端暂时无法继续接收数据:

text
tcp.window_size == 0 and tcp.flags.reset != 1

在 Windows 域环境中减少噪声

观察 Windows 客户端与域控交互时,可以先关注这些常见协议:

text
smb or nbns or dcerpc or nbss or dns

按 UDP 负载中的字节序列筛选

匹配 UDP payload 开头处的 3 字节序列 0x81 0x60 0x03。这里跳过了 8 字节 UDP header:

text
udp[8:3] == 81:60:03

如果要在 UDP header 或 payload 的任意位置查找同一组字节,可以使用 contains

text
udp contains 81:60:03

按 MAC 地址厂商 OUI 筛选

例如只显示来自 DELL 设备的流量:

text
eth.addr[0:3] == 00:06:5B

在字符串字段中搜索内容

匹配 SIP To header 中包含 a1762 的数据包:

text
sip.To contains "a1762"

使用正则表达式匹配字段

matches(也可写作 ~)可以在字符串字段和字节序列中使用正则表达式。下面的例子匹配 URI 以 gl=se 结尾的 HTTP 请求:

text
http.request.uri matches "gl=se$"

这里 $ 是正则表达式中的“字符串结尾”标记。

选择同名字段的特定层

在 Wireshark 4.0+ 中,如果一个数据包里有多层同名字段,可以使用 layer operator 指定第几层。例如一个 GRE 数据包同时包含外层和内层 IPv4 地址:

text
ip.src#1 == 10.1.2.3

匹配外层源地址。

text
ip.src#2 == 10.1.2.3

匹配内层源地址。

text
ip.src == 10.1.2.3

匹配任意一层出现的该源地址。

注意事项

ip.addr != x.x.x.x 可能不是你想要的结果

某些过滤字段会同时匹配多个协议字段。例如:

text
ip.addr == 10.43.54.65

等价于:

text
ip.src == 10.43.54.65 or ip.dst == 10.43.54.65

因此,如果你想排除所有发往或来自 10.43.54.65 的流量,不建议写成:

text
ip.addr != 10.43.54.65

更清楚的写法是对整个匹配条件取反:

text
not ip.addr == 10.43.54.65

也就是:

text
!(ip.src == 10.43.54.65 or ip.dst == 10.43.54.65)

类似情况也可能出现在 tcp.portudp.porteth.addr 等会同时匹配多个字段实例的过滤条件中。遇到“排除条件不符合预期”时,优先检查是否需要对整个表达式取反。

相关页面

  • CaptureFilters:捕获过滤器说明
  • ProtocolReference:按协议查找显示过滤器字段
  • ColoringRules:用过滤表达式控制数据包着色
  • Ethernet:以太网字段参考
  • TCP:TCP 字段参考
  • UDP:UDP 字段参考
  • IP:IP 字段参考

外部参考

  • Wireshark User's Guide:显示过滤器语法
  • Display filter reference:显示过滤器字段总表
  • Capture and display filter cheat sheets:过滤器速查表

Imported from https://wiki.wireshark.org/DisplayFilters on 2020-08-11 23:13:34 UTC

相关 Wireshark Wiki 页面

网络分析技术档案