抓包硬件与工具准备

做 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 电脑

刷写步骤

  1. 下载固件:从 Nordic 官方 GitHub 仓库(nrf52-sniffer-ble)下载最新的嗅探器固件,通常是 .hex 文件。
  2. 进入 DFU 模式:按住 Dongle 上的复位按钮(小圆孔里的那个),然后插入 USB。松开按钮,此时 Dongle 会以 DFU 模式挂载到电脑上,出现一个名为 NRF52BOOT 的 U 盘。
  3. 拖拽烧录:把下载好的 .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 插件

  1. 从 Nordic 的 GitHub 下载 nrf_sniffer_for_ble 插件包。
  2. 解压后,找到 extcap 文件夹,里面有个 nrf_sniffer_ble.py 文件。
  3. 把这个文件复制到 Wireshark 的 extcap 目录下:
    • Windows:C:\Program Files\Wireshark\extcap\
    • macOS:/Applications/Wireshark.app/Contents/PlugIns/wireshark/
    • Linux:/usr/lib/x86_64-linux-gnu/wireshark/extcap/
  4. 重启 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 设备权限管控很严。我有个同事就是没注意这个,折腾了两天,最后发现只是没点“允许”。

本章知识体系总览

下面这张图,把本章的核心逻辑串起来了。你对照着看,心里就有谱了。

抓包硬件与工具准备知识体系 抓包硬件与工具准备 · 知识体系 搭建可用的 BLE 抓包环境 硬件选型与对比 固件刷写与软件配置 驱动安装与权限设置 设备对比 nRF52840 / Ellisys / Frontline 按预算和场景选择 固件刷写 DFU 模式 → 拖拽 .hex 文件 或使用 nrfutil 命令行 驱动与权限 WinUSB / udev / macOS 隐私 Zadig 工具 / 权限授权 Wireshark 插件配置(nRF Sniffer extcap) Wireshark 中看到 nRF Sniffer 接口 ✓ 提示:硬件、固件、驱动、插件,四步缺一不可。按顺序走,别跳步。

好了,到这步,你的抓包环境就搭好了。硬件插上、驱动装好、Wireshark 里能看到 nRF Sniffer 接口,说明一切就绪。接下来,就可以开始真正的抓包实战了。