专栏:《WiFi 嵌入式物联网开发全套实战》 专栏定位:嵌入式 Linux/ESP32 WiFi 从原理→驱动→配网→协议→稳定性→抓包调试→量产优化全套工业实战 适配:物联网设备、智能家居、工控网关、无线透传设备、4G+WiFi 双模设备 💖 点赞 + 收藏 + 关注,嵌入式 WiFi 量产实战全套教程持续更新!
本章前言
前面章节我们大多从设备代码、日志层面排查 WiFi 问题。但很多疑难故障,日志信息有限:配网失败原因不明、随机重连无法复现、认证异常偶发、丢包无法定位是 AP 侧还是设备侧、MQTT 间歇性断开分不清是空口丢包还是上层软件问题。
设备串口日志只能看到设备自己上报的状态 ,看不到路由器真实下发的报文,看不到空中真实传输的 802.11 管理帧、控制帧、数据帧。此时唯一可靠手段就是无线抓包。
核心认知:日志是 "设备说自己发生了什么",抓包是 "空中真实发生了什么"。外场疑难 WiFi 问题,最终都要靠无线抓包下定论。
本章聚焦实战,完整讲解无线抓包环境搭建、监听模式开启、信道切换、802.11 关键过滤表达式、帧分类筛选,专门针对 ESP32 / 嵌入式 Linux 物联网设备调试,给出量产调试直接复制可用的过滤规则,解决配网、认证、关联、重连、丢包场景抓包分析。
33.1 无线抓包基础概念:监听模式(Monitor Mode)
普通网卡工作在 Managed 模式,只接收发给本机的报文;监听模式 (Monitor Mode) 会接收当前信道上空全部 802.11 无线帧,不管目的 MAC 是谁。
⚠️ 重要限制:
- 监听网卡只能抓取当前所在信道的报文;设备跳信道扫描时,抓包网卡也要同步切换信道,否则抓不到对应帧。
- 2.4G 与 5G 需要网卡硬件支持,廉价 USB 网卡大多只支持 2.4G 监听。
- Windows 原生网卡驱动大多不支持 Monitor 模式;Linux 平台 USB 无线网卡是无线抓包首选方案。
- 抓包得到的是 802.11 原始帧,不是以太网帧,包含 Radio Tap 头部。
33.2 抓包硬件选型(工程实战避坑)
| 硬件类型 | 是否推荐 | 说明 |
|---|---|---|
| PC 内置笔记本无线网卡 | 不推荐 | Windows 几乎不支持监听模式;Linux 部分型号支持,兼容性差 |
| RTL8812AU USB 网卡 | 强烈推荐 | 支持 2.4G+5G,Linux 监听模式成熟,物联网调试主流 |
| RTL8188CUS | 推荐 | 仅 2.4G,性价比高,适合只调试 2.4G 设备 |
| ESP32 本身抓包 | 辅助手段 | ESP‑IDF 提供 sniffer 接口,适合短时间抓包,不适合长时间大流量捕获 |
量产调试建议:常备一块 RTL8812AU USB 无线网卡,Ubuntu 虚拟机 / 物理 Linux 主机使用。
33.3 Linux 环境搭建监听模式完整步骤
使用 Ubuntu 物理机,不建议 VMware 虚拟机透传 USB 网卡,虚拟机 USB 透传容易丢包、监听模式异常。
33.3.1 确认网卡名称
iw dev
输出可以看到网卡接口,例如 wlan1,不要用 wlan0(本机上网网卡)。
33.3.2 关闭网卡原有进程
sudo airmon-ng check kill
会停止 NetworkManager,本机网络会断开,属于正常现象。
33.3.3 开启监听模式
sudo airmon-ng start wlan1
开启之后接口变为 wlan1mon。
33.3.4 切换抓包信道
物联网设备大多工作在 2.4G,例如信道 6:
sudo iw dev wlan1mon set channel 6
设备如果发生扫描、切信道,抓包网卡必须同步修改信道,否则抓不到设备报文。
33.3.5 启动 Wireshark
sudo wireshark
选择 wlan1mon 接口开始捕获。
33.3.6 抓包结束恢复网卡
sudo airmon-ng stop wlan1mon
sudo systemctl restart NetworkManager
33.4 ESP32 内置 Sniffer 抓包(轻量辅助抓包)
ESP‑IDF 提供 WiFi sniffer API,可以让 ESP32 本身进入嗅探模式,捕获当前信道 802.11 帧,通过串口输出。
适用场景:手边没有 USB 抓包网卡,做简易调试; 局限:串口带宽有限,长时间抓包会丢包,不适合高流量场景。
关键 API 简要示例:
// 开启sniffer,指定信道
esp_wifi_set_promiscuous(true);
esp_wifi_set_channel(6, WIFI_SECOND_CHAN_NONE);
注意:ESP32 开启 sniffer 之后,本身 WiFi STA/AP 功能会失效,不能同时联网 + 抓包。
33.5 Wireshark 802.11 帧基础认知
802.11 无线帧分为三大类:
- 管理帧 Management:Beacon、Probe Request/Response、Authentication、Association Request/Response、Deauthentication、Disassociation。
WiFi 扫描、认证、关联、踢下线全部由管理帧完成,排查配网、掉线、被 AP 踢除问题重点看管理帧。
-
控制帧 Control:RTS、CTS、ACK。用于空口握手。ACK 缺失就代表丢包。
-
数据帧 Data:承载实际业务 IP 报文,MQTT/TCP/UDP 业务数据封装在这里。
Radio Tap 头部:记录信号强度 RSSI、信道、速率,用于判断设备信号质量。
33.6 高频实战过滤表达式(直接复制使用)
打开 Wireshark,过滤栏填入表达式,快速筛选目标帧。
33.6.1 只看 802.11 管理帧(排查掉线、认证、关联)
wlan.fc.type == 0
33.6.2 过滤指定设备 MAC 地址(最常用)
将 aa:bb:cc:dd:ee:ff 替换为你的 ESP32 设备 MAC
wlan.addr == aa:bb:cc:dd:ee:ff
33.6.3 过滤解除认证帧 Deauthentication(设备被路由踢下线核心证据)
wlan.fc.type_subtype == 0x0c
选中 Deauth 帧,查看
wlan.reason_code原因码,定位是谁发起断开、断开原因。
常见 Reason Code 对照表
| Reason Code | 含义 | 工程分析 |
|---|---|---|
| 0 | 正常断开 | 设备主动发起退出 |
| 2 | 先前关联不再有效 | AP 超时老化剔除设备,休眠设备高频遇到 |
| 4 | 不支持该认证算法 | 加密 wlan.fc.type == 2 && ip 模式不匹配 |
| 8 | 关联离开 AP | BSS 切换漫游 |
| 15 | 4‑way 握手超时 | WiFi 密码错误 / 加密交互失败 |
33.6.4 过滤扫描探针帧 Probe Request(设备 WiFi 扫描)
wlan.fc.type_subtype == 0x04
33.6.5 过滤 Beacon 帧(路由器广播)
wlan.fc.type_subtype == 0x08
33.6.6 过滤数据帧,并且显示上层 IP 报文
wlan.fc.type == 2 && ip
33.6.7 过滤 ACK 缺失,查看空口丢包
wlan.fc.type == 1
33.6.8 组合过滤示例:只看某设备的 Deauth 和 Disassociate
wlan.addr == aa:bb:cc:dd:ee:ff && (wlan.fc.type_subtype == 0x0c || wlan.fc.type_subtype == 0x0a)
33.7 典型问题抓包分析思路(工程方法论)
场景 1:设备反复重连,日志提示 disconnect,不知道是设备主动还是 AP 踢除
- 过滤设备 MAC;
- 寻找 Deauthentication 帧;
- 看帧的源 MAC:
- 源 MAC=AP MAC:路由器主动踢掉设备,查 reason code;
- 源 MAC = 设备 MAC:设备主动断开 WiFi,问题出在设备软件 / 驱动。
场景 2:配网 SmartConfig 失败
抓包观察:设备是否收到 SmartConfig 报文;是否发出 Probe;是否发出 Authentication;卡在哪个阶段。区分是手机 APP 发报文问题,还是设备解析问题。
场景 3:WiFi 显示已连接,但是不通网
抓包看:关联成功;是否收到 DHCP Offer;是否 ARP 交互;区分 802.11 链路问题还是 IP 层问题。
场景 4:业务报文偶发丢包
观察数据帧之后是否有对应 ACK;没有 ACK = 空口丢包;有 ACK 但上层没收到报文,属于设备软件栈问题。
33.8 抓包量产调试避坑要点
- 信道同步是第一大坑:抓包网卡信道必须和被测设备工作信道一致,否则抓不到交互帧。设备扫描时会跳信道,此时固定单信道抓包会丢失部分扫描帧。
- 不要用 WiFi 上网网卡同时做监听抓包,网卡不能一边上网一边监听。
- 抓包文件建议保存为
.pcapng格式,方便后续回溯给团队分析。 - 外场复现偶发问题:同时保存设备串口日志 + wireshark pcap 抓包文件,两者时间戳对齐对照分析,只看单一资料很容易误判。
- 高干扰环境抓包报文量巨大,善用过滤表达式,不要裸看全部报文。
33.9 本章小结
无线抓包是 WiFi 嵌入式开发的终极调试手段,日志只能看到设备侧视角,抓包还原空中完整真相。
本章完成:
- 理解监听模式 Monitor Mode 原理与硬件选型避坑;
- Linux 环境完整搭建监听模式抓包流程;
- ESP32 内置 Sniffer 的使用场景与局限;
- 802.11 三大帧分类,Reason Code 故障码解读;
- 大量可直接复制的 Wireshark 过滤规则;
- 对应配网、掉线、不通网、丢包场景的标准分析思路。
掌握抓包之后,大量复现困难的间歇性 WiFi 疑难问题,就有了定位手段。
💖 点赞 + 收藏 + 关注,嵌入式 WiFi 量产实战全套教程持续更新!