1. BLE抓包基础回顾:硬件选型与软件环境搭建
做蓝牙抓包这件事,说难不难,说简单也不简单。我见过不少工程师,拿着一个几十块钱的USB dongle就想抓出所有问题,结果折腾一整天连个连接事件都看不全。嗯,工欲善其事,必先利其器。这一节,咱们先把基础打牢。
1.1 硬件选型:三款主流抓包设备怎么选?
市面上能用的BLE抓包硬件不少,但真正靠谱的,我个人觉得就三款:nRF Sniffer、Ellisys、Frontline。它们各有各的脾气,也各有各的适用场景。
| 设备 | 价格区间 | 抓包能力 | 适用场景 |
|---|---|---|---|
| nRF Sniffer | 低成本(约$30-50) | 单通道,需手动切换 | 日常调试、小规模开发 |
| Ellisys | 中高端(约$3000-8000) | 多通道同步,全频段 | 协议栈开发、互操作性测试 |
| Frontline | 高端(约$5000-15000) | 多协议并行,深度分析 | 认证测试、复杂场景排障 |
核心观点: 别盲目追求贵设备。如果你只是调试自家产品的连接参数,nRF Sniffer完全够用。但如果你要做蓝牙认证测试,或者排查多设备共存干扰,Ellisys或Frontline才是正解。
nRF Sniffer
这是Nordic官方推出的方案,基于nRF52840或nRF52832开发板。说白了,就是把一个开发板刷成抓包器。我最早入坑BLE时用的就是它,便宜、灵活,但有个硬伤——它只能抓一个射频通道的数据。
为什么会这样?因为nRF Sniffer本质上是一个BLE从机设备,它在某个时刻只能监听一个通道。如果你想抓完整的连接事件,就得手动跟着跳频序列切换通道。嗯,这里要注意,nRF Sniffer适合抓广播包和静态场景,动态连接场景会比较吃力。
我的经验: 如果你用nRF Sniffer抓连接数据,建议把设备放在1米以内,并且关闭周围其他蓝牙设备。我曾经在一个实验室里同时开着5个蓝牙设备,结果抓出来的包全是乱序的,排查了半天才发现是环境干扰。
Ellisys
Ellisys是我个人比较偏爱的工具。它最大的优势是多通道同步抓包——一个设备同时监听所有37个数据通道。你想想看,这意味着什么?你不需要关心跳频序列,不需要手动切换,插上就能看到完整的连接过程。
我记得有一次帮客户排查一个连接超时问题,用nRF Sniffer抓了三个小时都没抓到关键包,换成Ellisys后,五分钟就定位到了——原来是连接间隔设置得太短,导致从机来不及处理完数据就超时了。
Frontline
Frontline是Teledyne LeCroy的产品,定位比Ellisys更高。它不仅能抓BLE,还能同时抓Wi-Fi、Zigbee、Thread。如果你做的是物联网网关产品,需要排查多协议共存干扰,Frontline几乎是唯一选择。
不过说实话,Frontline的学习曲线比较陡。我第一次用的时候,光配置过滤规则就花了半天。但一旦上手,它的协议分析能力确实强大,能自动解析出LL层、L2CAP层、ATT层的所有细节。
1.2 软件环境搭建:Wireshark + nRF Sniffer CLI
硬件选好了,接下来就是搭软件环境。我个人习惯用Wireshark作为主分析工具,配合nRF Sniffer CLI做底层数据采集。
Wireshark安装与配置
Wireshark是目前最主流的网络协议分析工具,支持BLE抓包解析。安装步骤很简单,但有几个坑要注意。
- 下载安装包: 去Wireshark官网下载对应操作系统的版本。Windows用户建议选64位。
- 安装WinPcap/Npcap: 安装过程中会提示安装抓包驱动,一定要勾选。否则Wireshark无法捕获原始数据包。
- 配置USB驱动: 如果你用nRF Sniffer,需要安装Zadig工具,把nRF设备的驱动从默认的WinUSB换成libusb-win32。这一步很多人会忘,导致Wireshark识别不到设备。
避坑指南: 我曾经在Windows 10上折腾了一下午,Wireshark就是抓不到包。后来发现是Windows的USB驱动自动更新把libusb驱动覆盖了。解决办法是禁用Windows的驱动自动更新,或者用Zadig重新安装驱动并勾选“Install WCID Driver”。
nRF Sniffer CLI的使用
nRF Sniffer CLI是Nordic提供的命令行工具,可以更灵活地控制抓包过程。我个人比较喜欢用它来做自动化抓包,比如写个脚本定时抓取特定通道的数据。
基本用法如下:
# 列出可用设备
nrf_sniffer_cli.exe --list
# 开始抓包,指定通道37,输出到文件
nrf_sniffer_cli.exe --device COM3 --channel 37 --output capture.pcap
# 抓取所有广播通道(37/38/39)
nrf_sniffer_cli.exe --device COM3 --channel 37,38,39 --output broadcast.pcap
这里要注意,nRF Sniffer CLI默认只抓取BLE的广播通道(37/38/39)。如果你想抓连接后的数据通道,需要指定具体的通道号,或者使用--follow模式让它自动跟随跳频。
小技巧: 我习惯在抓包前先用nRF Sniffer CLI的--scan模式扫描一下环境,看看周围有哪些蓝牙设备在广播。这样可以提前过滤掉无关设备,减少抓包文件的大小。
1.3 抓包原理简述:BLE空中数据是怎么被捕获的?
搞清楚了硬件和软件,咱们再聊聊抓包的底层原理。说白了,BLE抓包就是一个“监听”的过程——你的抓包设备在射频层面接收空中传输的数据包,然后解析成我们能看懂的样子。
BLE的物理层工作在2.4GHz ISM频段,共40个通道,每个通道带宽2MHz。其中37/38/39是广播通道,其余37个是数据通道。抓包设备需要在这些通道上“听”数据。
这里有个关键点:抓包设备不是BLE通信的参与者。它只接收,不发送。所以它不会影响原有的通信过程。但这也意味着,它无法主动请求重传,如果某个包在空中被干扰了,抓包设备就收不到。
核心原理: 抓包设备通过射频前端接收空中信号,经过解调、解码、CRC校验后,将原始数据包封装成pcap格式,交给Wireshark等工具解析。整个过程对通信双方是透明的。
我画了一张图,帮你理解整个抓包流程:
从图上你能看到,抓包设备在射频层面“旁听”了设备A和设备B之间的通信。它把接收到的原始数据包封装成pcap格式,然后交给Wireshark做协议解析。
这里有个细节:抓包设备必须和通信设备在同一个射频通道上。如果设备A和B在通道10上通信,你的抓包设备却在通道37上监听,那就什么都抓不到。这就是为什么多通道同步抓包设备(如Ellisys)比单通道设备(如nRF Sniffer)更有优势。
注意: 抓包设备的位置很关键。我建议把抓包设备放在通信设备的中间位置,距离不超过2米。如果距离太远,信号强度不够,抓包设备可能收不到包。如果距离太近,又可能造成射频干扰。我曾经在一个金属屏蔽室里抓包,信号反射严重,抓出来的包全是重复的,后来把设备挪到开阔区域才解决。
好了,基础部分就聊这么多。硬件选型、软件搭建、抓包原理,这三块是后续所有进阶技巧的基石。你把这些搞清楚了,后面讲跳频跟踪、加密解密、重传分析时,才能跟得上节奏。