Wireshark 深度使用:过滤器语法、统计工具、着色规则、追踪流

说实话,Wireshark 这工具,很多人装了就是点开看一眼,然后关掉。觉得太复杂,全是乱码一样的十六进制。我刚开始也这样,抓了一堆包,根本不知道从哪看起。

后来被一个老工程师带了一次,他跟我说:「你连过滤器都不会写,抓一万个包也是白抓。」嗯,这话糙理不糙。今天我就把 Wireshark 最核心的四个技能拆开揉碎讲给你听。

本章核心:过滤器语法决定你能不能找到问题,统计工具决定你能不能看懂问题,着色规则决定你能不能一眼发现问题,追踪流决定你能不能还原问题。

Wireshark 四大核心技能 Wireshark 深度使用 过滤器语法 统计工具 着色规则 追踪流 显示过滤器 捕获过滤器 IO 图表 对话统计 默认着色 自定义着色 HTTP/TCP 流 四个技能互相配合,才能高效定位 WiFi 性能问题

过滤器语法:别在数据海里捞针

Wireshark 默认抓包,那数据量,你想想看,一分钟就能刷出几千个包。你要是不加过滤,光看就眼花了。我个人习惯是,抓包之前先想清楚:我要看什么?

显示过滤器 vs 捕获过滤器

这两个概念,很多人搞混。我简单说一下:

  • 捕获过滤器:在抓包之前设置,只抓符合条件的包。语法比较老,用的是 BPF(Berkeley Packet Filter)风格。好处是省资源,抓出来的文件小。
  • 显示过滤器:抓完包之后用,只显示符合条件的包。语法更丰富,支持协议字段级过滤。我平时 90% 的情况都用这个。

我的建议:除非你是在信号极差的环境下抓包(比如嵌入式设备),否则直接用显示过滤器就行。捕获过滤器一旦设错,数据就再也回不来了。

常用显示过滤器语法

我列几个最常用的,你直接拿去用:

过滤目标 过滤器表达式 说明
只看 WiFi 管理帧 wlan.fc.type == 0 Beacon、Probe Request/Response 等
只看数据帧 wlan.fc.type == 2 真正的业务流量
指定 BSSID wlan.bssid == xx:xx:xx:xx:xx:xx 只看某个 AP 的流量
指定客户端 MAC wlan.sa == xx:xx:xx:xx:xx:xx 源地址过滤
重传包 wlan.fc.retry == 1 信号差时重传会暴增
速率过滤 wlan_radio.data_rate > 100 只看高速率连接

注意:WiFi 抓包时,如果你用的是普通网卡(非 monitor 模式),很多管理帧是抓不到的。我曾经在 Windows 上折腾了半天,发现 Beacon 帧一个都没有,后来才意识到是网卡驱动不支持。

组合过滤与逻辑运算

单个条件不够用?那就组合起来:

# 只看某个 AP 的数据帧
wlan.bssid == aa:bb:cc:dd:ee:ff && wlan.fc.type == 2

# 排除广播包
!(wlan.da == ff:ff:ff:ff:ff:ff)

# 重传且速率低于 54Mbps
wlan.fc.retry == 1 && wlan_radio.data_rate < 54

嗯,这里要注意:Wireshark 的过滤器是大小写敏感的。字段名全小写,值的话 MAC 地址小写,数字直接写。我刚开始就老把 wlan.fc.type 写成 wlan.FC.Type,结果啥也过滤不出来。

统计工具:让数据自己说话

过滤器帮你找到问题,统计工具帮你量化问题。我每次做 WiFi 性能排查,必开三个统计面板。

IO 图表

这个最直观。打开路径:统计 → IO 图表。你能看到时间轴上的流量波动。

  • 正常情况:流量曲线平滑,峰值稳定
  • 异常情况:突然掉到零(断连)、锯齿状波动(重传风暴)

我记得有一次,用户投诉说每天下午 3 点网络卡顿。我抓了包一看 IO 图表,好家伙,每天 14:55 开始流量骤降,15:10 恢复。后来查出来是定时备份任务把带宽吃满了。

对话统计

路径:统计 → 对话。这里能看到每个设备发了多少数据,有多少重传。

我一般这么用:

  1. 按字节数降序排列,找到流量最大的设备
  2. 看它的重传比例,超过 5% 就要警惕
  3. 双击进去,自动应用过滤器,只看这个设备的包

关键指标:重传率 > 10% 基本可以判定信号覆盖有问题或者信道干扰严重。

WLAN 统计

这个专门针对 WiFi 的统计工具,很多人不知道。路径:统计 → WLAN 统计。

它能直接告诉你:

  • 每个 AP 的信道利用率
  • 信噪比分布
  • 速率分布(有多少设备在跑低速)

你想想看,如果一堆设备都在用 1Mbps 的速率通信,那信道利用率再高也没用,实际吞吐量惨不忍睹。

着色规则:一眼看出问题

Wireshark 默认就有着色规则。淡紫色是 TCP 流量,淡蓝色是 UDP,浅红色是重传包。但默认的不够用,尤其是做 WiFi 分析时。

自定义着色规则

我一般会加这几条:

颜色 过滤条件 用途
深红 wlan.fc.retry == 1 重传包,一眼就能看到密集区域
橙色 wlan.fc.type == 0 && wlan.fc.subtype == 8 Beacon 帧,看 AP 的发送间隔是否稳定
绿色 wlan_radio.data_rate > 100 高速率连接,绿色越多说明信号越好
紫色 wlan.fc.type == 0 && wlan.fc.subtype == 4 Probe Request,看客户端在扫描哪些 AP

设置方法:视图 → 着色规则 → 新建。颜色选深一点,别用浅色,不然在白色背景上根本看不清。我一开始就犯过这个错。

追踪流:还原现场

过滤器、统计、着色都是「看」问题,追踪流是「还原」问题。说白了,就是把一堆零散的包拼成一次完整的对话。

HTTP 流追踪

右键点击一个 HTTP 包 → 追踪流 → HTTP 流。Wireshark 会自动把请求和响应拼在一起,你直接看明文内容就行。

我遇到过最典型的一个案例:用户说网页打不开,我追踪了 HTTP 流,发现请求发出去后,服务器回了 302 重定向,但浏览器没跟着跳转。后来查出来是 DNS 解析出了问题,重定向的域名解析到了错误的 IP。

TCP 流追踪

WiFi 抓包中,TCP 流追踪特别有用。因为 WiFi 丢包会导致 TCP 重传、窗口缩小,这些在单个包里看不出来,但拼成流之后,问题一目了然。

# 快速定位 TCP 流
右键 → 追踪流 → TCP 流
# 你会看到类似这样的内容:
GET /index.html HTTP/1.1
Host: example.com
...
HTTP/1.1 200 OK
Content-Type: text/html
...

注意:如果追踪流里看到大量「TCP Previous segment not captured」或者「TCP Dup ACK」,说明 WiFi 链路上存在严重的丢包或乱序。这时候别去查服务器,先查无线环境。

WiFi 特有的流追踪

Wireshark 对 WiFi 也有专门的流追踪功能,比如 4 次握手过程的追踪。路径:无线 → 802.11 关联和认证流。

这个功能可以帮你看到:

  • 客户端从 Probe Request 到 Association 的完整过程
  • 每次握手的耗时
  • 失败的原因代码(比如密码错误、AP 拒绝)

我记得有一次,一个办公室的 WiFi 老是连不上。我追踪了关联流,发现客户端发了 Association Request 之后,AP 回了 Association Response 但状态码是 17(AP 已满)。后来一查,那个 AP 最大关联数设成了 20,而实际有 30 多个人在连。

总结一下:过滤器让你找到包,统计让你看懂趋势,着色让你快速定位异常,追踪流让你还原真相。这四个技能,你花一天时间练熟,以后排查 WiFi 问题至少省一半时间。