nRF Sniffer与Wireshark联调:从零搭建蓝牙BLE抓包环境

张开发
2026/5/31 20:15:52 15 分钟阅读
nRF Sniffer与Wireshark联调:从零搭建蓝牙BLE抓包环境
1. 硬件准备与基础概念蓝牙BLE抓包听起来高大上但其实就像给蓝牙通信装了个窃听器。我刚开始接触时也觉得神秘直到用nRF SnifferWireshark这套组合拳才发现原来抓包可以这么简单。先说硬件你需要准备两样东西nRF52开发板推荐nRF52840 Dongle某宝百元内就能搞定。这玩意儿长得像U盘实际是Nordic官方出的调试神器。我测试过市面上常见的52832/52840开发板都能用但Dongle最省事不用额外接线。待测蓝牙设备手机、智能手环都行。建议初期用手机APP测试比如LightBlue这类调试工具能稳定产生数据包。我第一个抓包对象就是自己的运动手环看着密密麻麻的数据流特别有成就感。这里有个坑要注意环境干扰。有次我在办公室抓包结果Wireshark里全是乱码后来发现是周围蓝牙设备太多。最佳实践是在家里单独房间操作把手机和Dongle距离控制在1米内。实测下来这样抓包成功率能到90%以上。2. 软件环境搭建软件组合就像三明治底层Python中间Wireshark最上层nRF Sniffer插件。下面是我的装机清单经过20次实测验证# 必装软件清单 - Wireshark 3.6 (最新稳定版就行) - Python 3.8 (别用2.7了2023年都快没人维护了) - nRF Sniffer v3.0 (官网下载压缩包)Python安装有个隐藏考点安装时务必勾选Add Python to PATH。我有次帮同事排查问题发现他Python命令不识别就是因为漏了这个选项。验证安装成功的正确姿势是python --version pip --version如果两个命令都能返回版本号说明环境基本OK。遇到报错的话建议彻底卸载重装比折腾环境变量省时间。3. nRF Sniffer插件配置解压下载的nRF_Sniffer压缩包后重点看两个文件夹extcapWireshark插件本体hex固件文件给Dongle刷机用关键操作步骤打开Wireshark - 帮助 - About - Folders记下Global Extcap path的路径通常是C:\Program Files\Wireshark\extcap把extcap文件夹里的4个文件全复制过去这里容易翻车的是文件权限问题。如果复制失败试试用管理员身份运行Wireshark。我习惯用Total Commander这类第三方工具复制比资源管理器更稳定。4. 固件烧录与验证拿出nRF52840 Dongle连上电脑USB口。烧录固件有两种流派懒人版 直接拖拽hex文件夹里的sniffer_nrf52840dongle_xxxxxx.hex文件到Dongle的U盘盘符。看到LED闪烁就说明烧录成功整个过程不到5秒。硬核版 用nRF Connect或J-Flash工具烧录适合需要自定义固件的场景。具体操作nrfjprog --program sniffer_nrf52840dongle_xxxxxx.hex --sectorerase nrfjprog --reset验证是否成功打开设备管理器应该能看到新的COM端口。如果显示未知设备可能是驱动问题安装nRF Connect就能自动装驱动。5. Wireshark抓包实战一切就绪后打开Wireshark会看到神奇的一幕接口列表里出现了nRF Sniffer for Bluetooth LE双击它开始抓包这时候要注意几个关键点设备筛选在nRF Sniffer工具栏的Device List里选All advertising devices会显示所有蓝牙设备。如果知道目标设备的MAC地址可以直接输入后四位过滤。信道选择BLE广播默认在37/38/39三个信道跳频。我建议新手先固定信道比如只勾选37信道这样数据更集中。数据过滤在Wireshark过滤栏输入btle可以屏蔽其他干扰数据。进阶玩法是用btatt.handle 0x000c这样的语法抓特定特征值。看个真实案例当我用手机连接智能灯泡时抓到的数据流是这样的| 时间戳 | 源地址 | 操作码 | 数据 | |--------|--------|--------|------| | 1.002s | C8:47:8D | 0x08 (读请求) | 特征值UUID | | 1.005s | C8:47:8D | 0x12 (写请求) | 亮度参数 80% |6. 高阶技巧与排错数据解析优化 Wireshark默认的BLE解析可能不够直观。把下载包里的Profile_nRF_Sniffer_Bluetooth_LE文件夹复制到Wireshark配置目录在Folders里找Personal profiles然后按CtrlShiftA选择这个配置数据立刻变得友好多了。常见翻车现场问题Wireshark找不到nRF Sniffer接口 排查检查extcap文件是否放对位置重启Wireshark用命令行运行nrf_sniffer_ble.exe --extcap-interfaces看是否有输出问题抓到的全是乱码 排查确认Dongle固件版本和Sniffer插件版本匹配检查目标设备是否启用了加密加密流量需要特殊配置问题Python报错No module named serial 解决在extcap目录下执行pip install -r requirements.txt7. 数据分析实战案例去年调试智能锁项目时遇到个诡异现象手机APP偶尔连不上设备。用抓包工具终于破案——原来是设备在广播时跳频策略有问题。具体分析过程先抓取正常连接时的数据包保存为good.pcapng复现故障时抓包保存为bad.pcapng用Wireshark的Compare功能对比两个文件发现故障时设备在38信道的广播间隔从100ms变成了500ms修改固件中的adv_interval参数后问题解决这种问题不用抓包工具根本没法定位这也是为什么我说nRF Sniffer是蓝牙开发的显微镜。现在我的开发流程里抓包分析已经成为标准动作就像程序员离不开Debugger一样。

更多文章