Wireshark 深度使用:过滤器语法、统计工具、着色规则、追踪流
说实话,Wireshark 这工具,很多人装了就是点开看一眼,然后关掉。觉得太复杂,全是乱码一样的十六进制。我刚开始也这样,抓了一堆包,根本不知道从哪看起。
后来被一个老工程师带了一次,他跟我说:「你连过滤器都不会写,抓一万个包也是白抓。」嗯,这话糙理不糙。今天我就把 Wireshark 最核心的四个技能拆开揉碎讲给你听。
本章核心:过滤器语法决定你能不能找到问题,统计工具决定你能不能看懂问题,着色规则决定你能不能一眼发现问题,追踪流决定你能不能还原问题。
过滤器语法:别在数据海里捞针
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 恢复。后来查出来是定时备份任务把带宽吃满了。
对话统计
路径:统计 → 对话。这里能看到每个设备发了多少数据,有多少重传。
我一般这么用:
- 按字节数降序排列,找到流量最大的设备
- 看它的重传比例,超过 5% 就要警惕
- 双击进去,自动应用过滤器,只看这个设备的包
关键指标:重传率 > 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 问题至少省一半时间。