🕵️ 用 Wireshark 嗅探 ESP32 通信数据,教你看懂“WiFi 的语言”
很多做 ESP32 的工程师都会遇到一个瓶颈:
- 代码看起来没问题
- 日志也没有明显报错
- 但WiFi 连接就是不稳定 / 偶尔失败 / 延迟巨大
这时候,继续“猜”已经没意义了。
真正工程级的调试手段只有一个:抓包,看数据在“空中”到底发生了什么。
今天这篇文章,手把手带你用Wireshark嗅探 ESP32 的通信数据,让你真正“听懂 WiFi 在说什么”。
一、为什么一定要学会抓 WiFi 包?
日志只能告诉你结果,而抓包能告诉你过程。
通过 Wireshark,你可以直接看到:
- ESP32 是否真的发出了 Probe / Auth / Assoc
- WPA2 / WPA3 四次握手是否完整
- DHCP 为什么失败
- 是否存在大量重传(Retry)
- ACK 丢失、信道拥塞、RTS/CTS 行为
一句话总结:
WiFi 调试,不看包就是盲人摸象。
二、抓 WiFi 包的前置条件(非常关键)
⚠️ 先说结论:
普通笔记本电脑,默认是抓不到 WiFi 空口数据的。
你需要满足以下条件之一:
✅ 方案一:支持 Monitor Mode 的无线网卡(最推荐)
USB WiFi 网卡
芯片推荐:
- RTL8812AU
- RTL8821CU
- Atheros AR9271
系统支持情况:
- Linux:最好(原生支持监听模式)
- Windows:需要特殊驱动
- macOS:部分型号支持
✅ 方案二:ESP32 本身开启 Sniffer(进阶)
ESP32 可以工作在Promiscuous Mode,用于监听周围 WiFi 帧(适合分析环境,但抓不到加密数据内容)。
三、Wireshark 基础设置(一步到位)
1️⃣ 开启监听模式(Linux 示例)
iplinksetwlan0 down iw dev wlan0settypemonitoriplinksetwlan0 up启动 Wireshark,选择wlan0接口。
2️⃣ 设置监听信道(否则什么都抓不到)
iw dev wlan0setchannel6⚠️必须和 ESP32 所连 AP 的信道一致。
四、先抓一个“完整的 ESP32 入网过程”
推荐测试流程:
- 关闭 ESP32
- 开始抓包
- 上电 ESP32
- 停止抓包
你会看到以下典型帧序列:
🔍 阶段 1:扫描(Discovery)
关键帧:
- Beacon
- Probe Request
- Probe Response
Wireshark 过滤器:
wlan.fc.type_subtype == 0x08 # Beacon wlan.fc.type_subtype == 0x04 # Probe Request你可以确认:
- ESP32 是否在主动扫描
- AP 是否正常回应
🔐 阶段 2:认证 & 关联
关键帧:
- Authentication
- Association Request / Response
过滤器:
wlan.fc.type_subtype == 0x0b # Auth wlan.fc.type_subtype == 0x00 # Assoc Req如果卡在这里,通常是:
- 加密模式不匹配
- AP 不支持 ESP32 的能力集
🔑 阶段 3:WPA2/WPA3 四次握手
你会看到:
- Message 1 / 2 / 3 / 4
- Key Information 字段
过滤器:
eapol重点观察:
- 是否 4 条消息都齐全
- 是否频繁重传
- Message 3 丢失最常见
🌐 阶段 4:DHCP 获取 IP
典型序列:
DHCP Discover DHCP Offer DHCP Request DHCP ACK过滤器:
bootp如果你看到:
- Discover 发出但没 Offer
👉 路由器 DHCP 表满 / 忙
五、看懂 WiFi 帧的几个关键字段
1️⃣ RSSI(信号强度)
在 Radiotap Header 中:
- -30 ~ -60 dBm:很好
- -70 dBm:开始不稳定
- < -80 dBm:必丢包
2️⃣ Retry 位(判断是否拥塞)
过滤重传帧:
wlan.fc.retry == 1大量 Retry =
👉 信道拥塞 / 干扰严重 / ACK 丢失
3️⃣ Duration / NAV(虚拟占用)
Duration 值越大,说明信道被占用时间越长
在 IoT 密集场景中非常常见。
4️⃣ ACK 是否正常返回
ACK 帧过滤:
wlan.fc.type_subtype == 0x1d无 ACK =
👉 数据可能白发了
六、抓包分析 ESP32 常见问题案例
❌ 案例 1:ESP32 偶尔连不上 WiFi
抓包现象:
- Probe 正常
- Auth 正常
- Message 3 重发多次
结论:
👉 WPA2 四次握手中丢包
👉 信号弱 / 干扰
❌ 案例 2:已连 WiFi 但无 IP
抓包现象:
- DHCP Discover 重复
- 无 Offer
结论:
👉 DHCP 服务问题
👉 路由器连接数已满
❌ 案例 3:MQTT 延迟巨大
抓包现象:
- TCP 重传多
- Retry 位频繁
- ACK 延迟
结论:
👉 CSMA/CA 退避严重
👉 2.4GHz 拥堵
七、ESP32 抓包调试黄金法则
✔ 先抓入网包
✔ 再抓业务包
✔ 用过滤器缩小范围
✔ 不要一上来就看 TCP
✔ 永远关注 Retry 和 RSSI
八、推荐 Wireshark 过滤器速查表
| 目的 | 过滤器 |
|---|---|
| Beacon | wlan.fc.type_subtype == 0x08 |
| Probe | wlan.fc.type_subtype == 0x04 |
| Auth | wlan.fc.type_subtype == 0x0b |
| WPA 握手 | eapol |
| DHCP | bootp |
| 重传 | wlan.fc.retry == 1 |
| ACK | wlan.fc.type_subtype == 0x1d |
九、总结:看懂 WiFi 的语言,你就赢了一半
一句工程真理送给你:
WiFi 问题的答案,不在代码里,而在数据包里。
当你真正学会用 Wireshark 看 ESP32 的通信行为:
- 掉线不再是玄学
- 连接失败有据可查
- 网络优化有明确方向
这也是从“能写代码”到“能做产品”的分水岭。