news 2026/9/28 12:56:56

nRF52840 Dongle + Wireshark:BLE 空口抓包实战与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nRF52840 Dongle + Wireshark:BLE 空口抓包实战与避坑指南

1. 为什么选择 nRF52840 Dongle 做 BLE 空口抓包

搞 BLE 开发的人迟早会碰到一个坎:设备连不上、连接频繁断开、配对失败、数据对不上。代码翻来覆去看不出问题,日志打了一堆也定位不到根因。这时候你需要的不是继续读代码,而是直接看空口上到底发生了什么。

BLE 是无线通信,设备之间的交互全在 2.4GHz 频段上跑。你看不到摸不着,只能靠抓包工具把空口数据捞出来分析。市面上能抓 BLE 空口的方案不少,但nRF52840 Dongle加Wireshark这套组合,是我用过性价比最高、上手最快、坑也最少的方案。

nRF52840 Dongle 是 Nordic 出的一块 USB 棒子,长得跟普通 U 盘差不多,插到电脑 USB 口就能用。它本身是一块完整的 nRF52840 开发板,带 USB 接口、按键、RGB LED,最关键的是它支持 Nordic 官方的nRF Sniffer固件。烧上这个固件之后,它就从一块通用开发板变成了专用的 BLE 空口嗅探器。价格大概一百多块,比起动辄几千的专业嗅探设备,门槛低太多了。

Wireshark 是网络协议分析的老牌工具,支持 BLE 抓包解析。nRF Sniffer 抓到的数据会通过 USB 传给 Wireshark,Wireshark 负责解码、展示、过滤。两者配合起来,你能看到 BLE 广播包、连接请求、数据交互、断开过程的完整时序,每一层协议字段都能展开看。

这套方案适合谁?如果你是 BLE 固件开发者、物联网产品工程师、嵌入式爱好者,或者正在调试 BLE 连接问题但苦于没有工具,那这套方案就是为你准备的。不需要你懂射频,不需要你买频谱仪,只要会烧固件、会装软件,就能把空口包抓下来。

我见过太多人卡在第一步——固件烧不进去。nRF52840 Dongle 的烧录方式和普通开发板不一样,它没有板载调试器,得用 Nordic 的 nRF Connect Programmer 通过 USB DFU 方式烧。这一步坑特别多,后面我会专门用一章来讲怎么避坑。

2. 抓包前的准备工作:硬件、软件、环境一个都不能少

2.1 硬件清单与选型理由

先说硬件。核心设备就一个:nRF52840 Dongle(型号 PCA10059)。注意别买错,Nordic 还有 nRF52840 DK 开发板,那个是带调试器的大家伙,虽然也能抓包,但价格贵好几倍,而且体积大不方便。Dongle 才是抓包的正解。

除了 Dongle,你还需要一台电脑。Windows、Linux、macOS 都行,但 Windows 用户最多,坑也最集中,后面避坑指南主要针对 Windows。电脑上要有可用的 USB 口,建议直接插主板上的 USB 口,别用前面板或者 USB Hub,供电不稳会导致 Dongle 识别异常。

如果你要抓的是自己开发的 BLE 设备,那设备本身当然要有。另外建议准备一个已知能正常工作的 BLE 设备作为对照,比如手机或者手环,用来验证抓包环境是否正常。

注意:nRF52840 Dongle 出厂时自带一个简单的 BLE 示例固件,但那个不能用来抓包。必须烧录 nRF Sniffer 固件才能进入嗅探模式。

2.2 软件全家桶:版本选择与下载渠道

软件方面需要三样东西:

第一,nRF Connect for Desktop。这是 Nordic 官方的桌面工具集,里面包含 Programmer 工具,用来给 Dongle 烧固件。去 Nordic 官网下载,选对应操作系统的版本。建议下载最新稳定版,老版本可能识别不到新的固件包。

第二,nRF Sniffer 固件包。这个固件包里面包含 hex 文件和相关配置。Nordic 官网有下载,文件名类似nrf_sniffer_for_bluetooth_le_xxx.zip。下载下来解压,里面会有hex目录,存放固件文件。

第三,Wireshark。去 Wireshark 官网下载最新稳定版。安装的时候注意,会提示安装Npcap驱动,这个必须装,它是抓包的核心驱动。如果你电脑上已经装过 Npcap 或者 WinPcap,可能会冲突,建议先卸载旧的再装。

版本兼容性这块我踩过坑。nRF Sniffer 固件版本和 Wireshark 插件版本要匹配,固件包里的extcap目录下有对应的 Wireshark 插件文件。如果你只更新了固件没更新插件,或者反过来,Wireshark 里可能看不到 nRF Sniffer 接口。所以每次更新固件,记得把插件也一起更新。

2.3 环境检查:驱动、权限、USB 识别

软件装完之后,先别急着烧固件。把 Dongle 插上电脑,打开设备管理器看看能不能识别。正常情况下会看到一个 USB 设备,可能显示为 "nRF52840 Dongle" 或者 "USB Composite Device"。

如果设备管理器里出现黄色感叹号,说明驱动有问题。Windows 10 和 Windows 11 一般能自动识别,如果不行,去 Nordic 官网下载 nRF Connect Programmer 的时候会附带 USB 驱动,手动装一下。

Linux 用户需要注意权限问题。普通用户默认没有 USB 设备访问权限,需要添加 udev 规则。nRF Sniffer 固件包里通常有99-nrf-sniffer.rules文件,复制到/etc/udev/rules.d/目录下,然后重新加载 udev 规则。macOS 用户相对省心,一般插上就能用。

提示:如果你用的是虚拟机,USB 直通可能会出问题。建议在物理机上操作,或者确保虚拟机 USB 控制器设置正确。

3. 固件烧录:整个流程最容易翻车的地方

3.1 nRF52840 Dongle 的烧录原理

这是整篇教程最核心也最容易出问题的部分。nRF52840 Dongle 和普通开发板不一样,它没有板载 J-Link 调试器。普通开发板用 SWD 接口烧录,Dongle 没有这个接口,它用的是USB DFU(Device Firmware Update)方式。

DFU 烧录的逻辑是这样的:Dongle 上有一个 Nordic 预置的Open Bootloader,这个 Bootloader 在设备上电或者按键触发时会进入 DFU 模式。进入 DFU 模式后,Dongle 会枚举成一个 USB DFU 设备,电脑上的 Programmer 工具就能通过 USB 把新固件推送到 Dongle 的 Flash 里。

关键点在于:Dongle 必须进入 DFU 模式,电脑才能烧录。怎么进入 DFU 模式?按一下 Dongle 上的复位按键。这个按键很小,在 USB 接口旁边,需要用笔尖或者针戳一下。按下去之后,Dongle 上的 RGB LED 会开始闪烁红色,表示进入了 DFU 模式。

3.2 用 nRF Connect Programmer 烧录固件

打开 nRF Connect for Desktop,找到 Programmer 应用,点击打开。界面左上角会有一个设备选择下拉框,正常情况下应该能看到你的 Dongle。如果看不到,点一下 "Select device" 旁边的刷新按钮。

选中设备后,点击 "Add file" 按钮,找到你解压的 nRF Sniffer 固件包里的 hex 文件。路径大概是nrf_sniffer_for_bluetooth_le_xxx/hex/nrf_sniffer_for_bluetooth_le_xxx.hex。加载之后,Programmer 会显示固件信息,包括起始地址和大小。

确认无误后,点击 "Write" 按钮开始烧录。烧录过程大概十几秒,进度条走完会提示成功。烧录完成后,Dongle 会自动重启,RGB LED 会变成绿色闪烁,表示 nRF Sniffer 固件已经运行起来了。

注意:烧录过程中千万不要拔掉 Dongle,否则可能导致固件损坏,需要重新进入 DFU 模式恢复。

3.3 烧录失败的常见原因与排查

烧录失败是新手遇到最多的问题,我整理了几种典型情况:

情况一:Programmer 里看不到设备。先检查 Dongle 是否进入了 DFU 模式,LED 是否在闪红色。如果没闪,重新按复位键。如果按了还是不行,换一个 USB 口试试,有些 USB 口供电不足或者驱动有问题。

情况二:烧录到一半报错。最常见的原因是 USB 连接不稳定。换一根质量好的 USB 线,或者直接插主板 USB 口。另外,如果电脑上同时运行了其他占用 USB 的软件,比如虚拟机、串口工具,也可能干扰烧录,先关掉。

情况三:烧录成功但 Wireshark 里看不到接口。这说明固件烧进去了,但 Wireshark 插件没装好。检查 Wireshark 安装目录下的extcap文件夹,看看有没有nrf_sniffer.py或者类似文件。如果没有,把固件包里的extcap目录内容复制过去。然后重启 Wireshark。

情况四:Dongle 变砖了。别慌,nRF52840 Dongle 很难真正变砖。按住复位键不放,再插 USB,等几秒松开,Dongle 会强制进入 DFU 模式,然后重新烧录即可。

3.4 固件版本与 Wireshark 插件的匹配

这个问题值得单独拿出来说。nRF Sniffer 固件包解压后,目录结构大概是这样的:

nrf_sniffer_for_bluetooth_le_xxx/ ├── hex/ │ └── nrf_sniffer_for_bluetooth_le_xxx.hex ├── extcap/ │ ├── nrf_sniffer.py │ └── ... └── doc/

hex目录是固件,extcap目录是 Wireshark 插件。烧录固件用hex里的文件,Wireshark 抓包用extcap里的文件。两者版本必须一致,否则可能出现协议解析错误或者接口不识别。

安装插件的方法:把extcap目录下的所有文件复制到 Wireshark 安装目录的extcap文件夹里。Windows 默认路径是C:\Program Files\Wireshark\extcap。复制完之后,重启 Wireshark,在接口列表里应该能看到 "nRF Sniffer for Bluetooth LE" 这个接口。

4. Wireshark 抓包实操:从广播包到连接交互

4.1 Wireshark 接口配置与抓包启动

Wireshark 装好、插件放好之后,打开 Wireshark。主界面上会列出所有可用接口,除了你电脑的网卡,还应该有一个叫 "nRF Sniffer for Bluetooth LE" 的接口。如果没看到,点一下刷新按钮,或者检查插件是否放对位置。

选中这个接口,但先别急着点开始。nRF Sniffer 需要配置一下抓包参数。点击接口旁边的齿轮图标,或者双击接口进入配置页面。这里有几个关键选项:

  • Device:选择你的 Dongle。如果只有一个,默认就是它。
  • Channel:选择要抓的 BLE 信道。BLE 广播使用 37、38、39 三个信道,连接后会在 0-36 信道之间跳频。如果你想抓广播包,选 37、38 或 39;如果想抓连接后的数据,选 "Advertising" 或者 "Data" 模式。
  • Target Address:目标设备地址。如果你只想抓某个特定设备,填它的 MAC 地址。留空则抓所有设备。

配置好之后,点 "Start" 开始抓包。这时候 Dongle 上的 LED 会变成蓝色闪烁,表示正在嗅探。

4.2 广播包抓取与分析

BLE 设备在未连接时,会周期性地在 37、38、39 三个信道上发送广播包。广播包里包含设备名称、MAC 地址、服务 UUID、发射功率等信息。抓广播包是了解设备行为的第一步。

在 Wireshark 里,广播包会显示为 "LE LL" 协议,展开后能看到 "Adv PDU" 字段。重点看这几个字段:

  • AdvA:广播设备的 MAC 地址。
  • AdvData:广播数据,里面包含设备名称、服务 UUID、厂商自定义数据等。
  • RSSI:信号强度,用来判断设备距离。

我一般会先用广播包确认设备是否在正常广播,广播间隔是否稳定,广播数据是否符合预期。如果设备根本不发广播,那后面连接的问题就不用查了,先解决广播。

提示:Wireshark 的过滤器很好用。比如只想看某个设备的广播包,可以输入btle.advertising_address == xx:xx:xx:xx:xx:xx。想看特定类型的广播包,可以用btle.advertising_header.pdu_type == 0x00过滤可连接广播。

4.3 连接建立过程抓取

广播包看完了,接下来抓连接过程。BLE 连接建立有一套固定的时序:设备 A 发送连接请求(CONNECT_REQ),设备 B 响应,然后双方进入连接状态,开始按照连接参数进行数据交互。

在 Wireshark 里,连接请求会显示为 "CONNECT_REQ" 包,展开后能看到连接参数:

  • Access Address:连接后的接入地址,用来区分不同的连接。
  • CRCInit:CRC 初始值。
  • WinSize、WinOffset:窗口大小和偏移。
  • Interval:连接间隔,单位是 1.25ms。
  • Latency:从设备延迟。
  • Timeout:连接超时时间。

这些参数决定了连接后的通信行为。比如连接间隔设得太小,功耗会高;设得太大,数据传输延迟会大。抓包的时候可以对照代码里配置的参数,看看实际空口上是不是一致。

连接建立后,Wireshark 会自动跟踪这个连接,后续的数据包都会归到这个连接下。你可以看到 LL 层的空包、数据包、控制包,以及上层 ATT、GATT 的交互。

4.4 数据交互与断开过程分析

连接建立后,主从设备之间会进行数据交互。如果你在调试 GATT 通信,可以看到 ATT 层的 Read、Write、Notify、Indicate 等操作。每个操作都有对应的响应包,通过抓包可以确认数据是否正确送达、响应是否及时。

断开过程也值得关注。BLE 断开有两种方式:一种是主动断开,一方发送 LL_TERMINATE_IND 包;另一种是超时断开,连接超时后自动断开。抓包时如果看到 LL_TERMINATE_IND,说明是主动断开;如果看到连接突然消失,没有终止包,那可能是超时或者信号丢失。

我遇到过一个问题:设备连接后几秒钟就断开,代码里看不出问题。抓包后发现,从设备一直没有回应主设备的空包,导致连接超时。后来查出来是从设备的射频配置有问题,导致接收灵敏度不够。这种问题不抓包根本定位不到。

5. 常见问题与排查技巧实录

5.1 Wireshark 打不开或找不到接口

这是新手最常见的问题。Wireshark 打不开,可能是 Npcap 驱动没装好,或者和系统里的其他抓包驱动冲突。解决办法:卸载所有抓包驱动(Npcap、WinPcap),重启电脑,重新安装 Wireshark,安装时勾选 Npcap。

找不到 nRF Sniffer 接口,先确认插件是否放到了正确的extcap目录。然后检查 Wireshark 的版本,太老的版本可能不支持最新的插件。另外,Dongle 必须处于空闲状态,如果被其他软件占用了,Wireshark 也看不到。

5.2 抓不到包或抓到的包不完整

抓不到包,先看 Dongle 的 LED 状态。蓝色闪烁表示正在嗅探,如果 LED 不亮或者常亮,说明固件没跑起来,重新烧录。

抓到的包不完整,通常是信道配置问题。BLE 广播在 37、38、39 三个信道轮询,如果你只选了一个信道,可能会漏掉部分广播包。建议三个信道都选上。另外,如果目标设备使用了扩展广播或者周期性广播,需要确认 nRF Sniffer 固件版本是否支持。

信号强度也会影响抓包质量。Dongle 离目标设备太远,RSSI 太低,会丢包。建议把 Dongle 放在目标设备附近,一米以内最好。

5.3 固件烧录报错与恢复方法

烧录报错的情况前面已经说了几种,这里补充一个恢复方法。如果 Dongle 完全没反应,LED 不亮,电脑也识别不到,试试强制进入 DFU 模式:按住复位键,插 USB,保持按住 3 秒后松开。这时候 LED 应该会闪红色,电脑会识别到一个 DFU 设备,然后重新烧录。

如果连 DFU 模式都进不去,那可能是硬件问题,比如 USB 口损坏或者 Flash 损坏。这种情况比较少见,但如果你买的是二手 Dongle,有可能遇到。

5.4 常见问题速查表

问题现象可能原因解决方法
Programmer 看不到设备Dongle 未进入 DFU 模式按复位键,确认 LED 闪红色
烧录中途报错USB 连接不稳定换 USB 口,换线,关闭其他 USB 软件
Wireshark 无 nRF Sniffer 接口插件未安装或版本不匹配复制 extcap 文件到 Wireshark 目录
抓不到广播包信道选择错误同时选 37、38、39 信道
抓到的包解析异常固件与插件版本不一致更新固件和插件到同一版本
连接后频繁断开连接参数配置不当抓包查看 Interval、Timeout 参数
Dongle 变砖固件损坏强制进入 DFU 模式重新烧录

5.5 实操心得与避坑建议

最后分享几个我踩过坑之后总结的经验。

第一,USB 线很关键。nRF52840 Dongle 对 USB 线质量比较敏感,劣质线会导致供电不足、数据传输不稳定。我一开始用了一根便宜的延长线,烧录十次有五次失败,换了原装线之后一次成功。

第二,Wireshark 版本别追新。最新版 Wireshark 有时候和 nRF Sniffer 插件兼容性不好,建议用官方推荐的稳定版本。我目前用的是 3.6.x 系列,配合 nRF Sniffer 4.1.0 固件,一直很稳。

第三,抓包时关闭其他无线设备。2.4GHz 频段很拥挤,WiFi、蓝牙鼠标、无线键盘都在这个频段上跑。抓包时尽量关掉不必要的无线设备,减少干扰。

第四,保存抓包文件。Wireshark 抓到的数据可以保存为 pcapng 文件,方便后续分析或者发给同事。我习惯每次抓包都保存一份,标注好时间、设备、问题现象,后面查起来很方便。

第五,善用过滤器。BLE 抓包数据量很大,不加过滤的话,几秒钟就能刷出几千个包。学会用 Wireshark 的显示过滤器,比如btle只看 BLE 包,btatt只看 ATT 层,btl2cap只看 L2CAP 层,能大幅提升分析效率。

这套 nRF52840 Dongle 加 Wireshark 的抓包方案,我从开始摸索到熟练使用大概花了一周时间,其中大部分时间都耗在固件烧录和插件配置上。一旦环境搭好,后面抓包分析就是水到渠成的事。希望这篇教程能帮你少走弯路,把时间花在真正的问题定位上,而不是跟工具较劲。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 12:56:38

爬虫数据落库实战:MySQL/PostgreSQL表设计、索引与Upsert

说实话,爬虫做到第十天,十个人里有八个会开始思考同一个问题:抓下来的数据到底该往哪儿放?CSV文件打开乱码、Excel卡到崩溃、重复数据堆成山,这些我都经历过。搞到后面你会发现,爬虫真正拉开差距的不只是请…

作者头像 李华
网站建设 2026/9/28 12:56:08

YOLOv8扶梯梳齿板异物检测:从训练自己的数据集到可视化界面部署

简介:一套基于YOLOv8的商场自动扶梯梳齿板异物卡滞预警系统完整项目,专门针对扶梯梳齿板异物卡滞场景的实时检测与告警,适用于计算机视觉、深度学习方向的毕业设计、课程设计或初期项目立项,并已跑通完整流程。压缩包共8个文件&am…

作者头像 李华
网站建设 2026/9/28 12:54:42

中心子数组计数:从中心扩展看清区间和相等的本质

星期六爬起来打周赛的人都有一种默契:题可以不会,但一定要知道它卡在哪。第484场周赛的Q2,题号3804,标题是“中心子数组的数量(Count the Number of Centered Subarrays)”。这个题名本身就有迷惑性&#x…

作者头像 李华
网站建设 2026/9/28 12:52:53

Kafka按时间戳查询消息:原理、API与实战全解析

做Kafka排查的人,十有八九都对着这句话抓过狂:“我想看看昨晚23:30之后,这个topic到底消费了哪些消息”。以前要么按消息总量平均估算offset,要么干脆把消费组重置到最新再慢慢刷,效率低而且不精准。Kafka从0.10版本开…

作者头像 李华
网站建设 2026/9/28 12:52:53

网易云音乐情感分类数据集:39.5万条三元组实战指南

简介:面向音乐情感分析的数据集,取自网易云音乐官方歌单与歌曲标注信息,累计约39.5万条情感标签记录,适合自然语言处理、推荐系统及音乐情感分析方向的研究者、数据科学初学者与竞赛选手使用。每条数据包含歌曲ID、歌单ID与情感标…

作者头像 李华
网站建设 2026/9/28 12:52:24

气候降尺度全解析:统计方法与机器学习的原理、流程与实操

搞气候数据分析的同行应该都有这种感觉:手里拿着一套全球气候模式的输出结果,分辨率动辄一两百公里,想拿来驱动某个流域的水文模型、评估某个城市的极端高温风险,或者给一个省份的农业区划做未来气候预估,直接用根本没…

作者头像 李华