抓包硬件与工具准备
做 BLE 抓包分析,工具选对了,事情就成了一半。我见过不少新手,上来就拿着普通蓝牙适配器想抓包,结果折腾半天啥也抓不到。说白了,硬件选型这一步,决定了你后面能不能顺利开展工作。
这一章,我就带你过一遍主流的抓包设备,然后手把手教你刷固件、装软件、配驱动。嗯,都是些基础但绕不开的活儿。
常用抓包设备对比
目前市面上主流的 BLE 抓包设备,我按使用场景分成三类:入门级、专业级、企业级。你想想看,你的预算和需求在哪,对号入座就行。
| 设备 | 类型 | 价格区间 | 最大连接数 | 协议支持 | 适用场景 |
|---|---|---|---|---|---|
| nRF52840 Dongle | 入门级 | ¥100-200 | 1-2 个 | BLE 4.0/5.x | 个人开发、小规模调试 |
| Ellisys BEX400 | 专业级 | ¥3万-5万 | 8-16 个 | BLE + BR/EDR + LE Audio | 协议栈开发、认证测试 |
| Frontline ComProbe | 企业级 | ¥8万-15万 | 32+ 个 | 全协议栈 + 共存分析 | 芯片验证、产线问题定位 |
我的建议:如果你刚开始学 BLE 抓包,或者只是做简单的应用层调试,nRF52840 Dongle 完全够用。我自己带团队时,90% 的日常问题都是用这个几十块钱的小东西搞定的。只有遇到多连接并发或者 LE Audio 这种新特性时,才会搬出 Ellisys。
为什么会这样?因为 nRF52840 的方案本质上是把 Nordic 的芯片刷成嗅探器,它监听的是空口数据,不参与连接。而 Ellisys 和 Frontline 是硬件级别的协议分析仪,能同时解析多个通道、多个连接,还能做时序分析。说白了,一分钱一分货。
nRF52840 Dongle 刷写与固件烧录
我个人习惯用 nRF52840 Dongle 做入门设备,因为它便宜、开源、社区活跃。但买回来的 Dongle 默认是 USB 串口固件,得先刷成嗅探器固件才能用。
准备工作
- 一块 nRF52840 Dongle(PCA10059 或兼容版本)
- 一根 Micro-USB 数据线(注意:要能传数据的,不是充电线)
- 一台 Windows/Linux/macOS 电脑
刷写步骤
- 下载固件:从 Nordic 官方 GitHub 仓库(
nrf52-sniffer-ble)下载最新的嗅探器固件,通常是.hex文件。 - 进入 DFU 模式:按住 Dongle 上的复位按钮(小圆孔里的那个),然后插入 USB。松开按钮,此时 Dongle 会以 DFU 模式挂载到电脑上,出现一个名为
NRF52BOOT的 U 盘。 - 拖拽烧录:把下载好的
.hex文件直接拖进NRF52BOOT盘里。文件复制完成后,Dongle 会自动重启,盘符消失,烧录完成。
小技巧:如果你用的是 macOS 或 Linux,拖拽烧录可能不灵。我遇到过这种情况,后来改用 nrfutil 命令行工具,稳得很。命令如下:
nrfutil dfu serial -pkg sniffer_package.zip -p /dev/tty.usbmodemXXXX
端口号根据你的系统实际显示填写。
注意:刷写完成后,Dongle 的 USB 描述符会变成 nRF Sniffer for BLE。如果电脑没识别到,别慌,大概率是驱动问题,往下看。
Wireshark 安装与插件配置
Wireshark 是抓包分析的核心工具。嗯,这里要注意,不是装个 Wireshark 就能直接抓 BLE 包的,得装插件。
安装 Wireshark
- 从
wireshark.org下载最新稳定版(我建议用 4.x 版本,对 BLE 支持更好) - 安装时勾选 USB Capture 和 Npcap 组件(Windows 下必须)
- 安装完成后重启电脑
配置 nRF Sniffer 插件
- 从 Nordic 的 GitHub 下载
nrf_sniffer_for_ble插件包。 - 解压后,找到
extcap文件夹,里面有个nrf_sniffer_ble.py文件。 - 把这个文件复制到 Wireshark 的
extcap目录下:- Windows:
C:\Program Files\Wireshark\extcap\ - macOS:
/Applications/Wireshark.app/Contents/PlugIns/wireshark/ - Linux:
/usr/lib/x86_64-linux-gnu/wireshark/extcap/
- Windows:
- 重启 Wireshark,在接口列表里应该能看到
nRF Sniffer for BLE了。
避坑指南:我曾经在 Windows 上折腾了一下午,Wireshark 就是认不出插件。后来发现是 Python 环境问题——nRF Sniffer 插件依赖 Python 3.8+,而且必须安装 pyserial 库。如果你遇到类似情况,打开命令行跑一下:
pip install pyserial
然后重启 Wireshark,问题解决。
USB 驱动与权限设置
硬件插上了,软件装好了,但 Wireshark 里就是看不到设备?别急,大概率是驱动或权限的问题。
Windows 驱动
- nRF52840 Dongle 在 DFU 模式下使用 WinUSB 驱动。
- 刷完嗅探器固件后,设备会以 CDC ACM 串口设备出现。
- 如果系统没自动装好驱动,用 Zadig 工具手动替换驱动为 WinUSB 或 libusb-win32。
我的经验:Zadig 是个神器,但别乱点。只替换你确认是 nRF Dongle 的那个设备,别把鼠标键盘的驱动也换了,否则……嗯,你懂的。
Linux 权限
- Linux 下默认普通用户没有 USB 设备访问权限。
- 创建 udev 规则文件:
/etc/udev/rules.d/99-nrf-sniffer.rules - 内容如下:
# nRF Sniffer for BLE
SUBSYSTEM=="tty", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="c00a", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="c00a", MODE="0666"
- 保存后执行
sudo udevadm control --reload-rules && sudo udevadm trigger - 拔插 Dongle,然后启动 Wireshark,应该就能看到了。
macOS 权限
- macOS 相对简单,插上 Dongle 后,系统会弹出权限请求,允许即可。
- 如果 Wireshark 还是看不到设备,检查 系统偏好设置 → 安全性与隐私 → 隐私 → 自动化,确保 Wireshark 有权访问系统 USB。
重要提醒:macOS 从 Catalina 开始对 USB 设备权限管控很严。我有个同事就是没注意这个,折腾了两天,最后发现只是没点“允许”。
本章知识体系总览
下面这张图,把本章的核心逻辑串起来了。你对照着看,心里就有谱了。
好了,到这步,你的抓包环境就搭好了。硬件插上、驱动装好、Wireshark 里能看到 nRF Sniffer 接口,说明一切就绪。接下来,就可以开始真正的抓包实战了。