第二章 抓包环境搭建:硬件选型与软件工具链
做蓝牙Mesh抓包分析,第一步不是打开Wireshark,而是把手里的家伙事儿备齐。我见过不少新手,拿着普通蓝牙适配器就想抓Mesh包,结果抓了一堆乱码,还以为是协议栈有问题。说白了,工具不对,努力白费。
这一章,咱们就把硬件选型和软件环境一次性讲透。你跟着我走一遍,保证能搭出一个能实战的抓包平台。
2.1 硬件选型:nRF52840 DK vs TI CC2540
目前市面上主流的蓝牙Mesh抓包硬件,就这两款。我两个都用过,各有各的脾气。
| 对比项 | nRF52840 DK | TI CC2540 USB Dongle |
|---|---|---|
| 芯片 | nRF52840 (ARM Cortex-M4F) | CC2540 (8051内核) |
| 蓝牙版本 | Bluetooth 5.3 | Bluetooth 4.0 |
| Mesh支持 | 原生支持,可抓所有信道 | 需刷固件,仅支持37/38/39广播信道 |
| 抓包带宽 | 全信道扫描(40个信道) | 单信道模式,需手动切换 |
| 价格 | 约¥400-500(开发板) | 约¥30-50(山寨版) |
| 上手难度 | 中等,需刷nRF Sniffer固件 | 低,即插即用(刷好固件后) |
我的建议:如果你预算充足,直接上nRF52840 DK。我在项目中遇到过CC2540抓不到Mesh relay包的情况,折腾了两天才发现是信道覆盖不全。nRF52840 DK虽然贵点,但能让你少走很多弯路。
2.2 nRF52840 DK 环境搭建
这块板子我用了三年,流程已经烂熟于心。你按步骤来,十分钟就能搞定。
2.2.1 刷写nRF Sniffer固件
板子出厂时跑的是普通BLE示例程序,得先刷成抓包专用固件。
- 从Nordic官网下载
nRF-Sniffer-for-BLE_4.1.1.zip(或更新版本) - 解压后找到
hex/nrf52840_xxaa_sniffer_for_ble.hex - 用nRF Connect Programmer或J-Flash将hex文件烧录到DK板
- 烧录完成后,板子上的LED会慢闪,表示进入抓包模式
小技巧:刷固件前,先按住板子上的RESET键,再通过USB连接电脑。这样能确保进入DFU模式,避免烧录失败。我曾经因为没按RESET,卡了半小时。
2.2.2 安装驱动与Wireshark插件
固件刷好了,还得让Wireshark认识这块板子。
# 步骤1:安装Wireshark(推荐3.6以上版本)
# 下载地址:https://www.wireshark.org/download.html
# 步骤2:安装nRF Sniffer配套驱动
# 在nRF-Sniffer-for-BLE目录下找到
# extcap/nrf_sniffer_for_ble.py
# 将其复制到Wireshark的extcap目录
# Windows默认路径:C:\Program Files\Wireshark\extcap\
# 步骤3:重启Wireshark
# 在接口列表里应该能看到 "nRF Sniffer for BLE" 选项
注意:Python环境必须安装pyusb库。如果Wireshark里看不到nRF接口,八成是pyusb没装。执行 pip install pyusb 即可解决。
2.3 TI CC2540 环境搭建
CC2540的优势是便宜、小巧。但说实话,用它抓Mesh包有点勉强。不过既然有人用,我还是把方法讲清楚。
2.3.1 刷写BT-Sniffer固件
市面上常见的CC2540 USB Dongle,默认固件是BLE从机模式。需要刷成抓包模式。
- 下载TI官方
BTool或第三方CC2540_Sniffer固件 - 使用CC Debugger或SmartRF Flash Programmer烧录
- 烧录成功后,Dongle插入电脑会识别为 "Texas Instruments CC2540"
避坑指南:我曾经买过一批山寨CC2540 Dongle,刷完固件后电脑死活不识别。后来发现是USB VID/PID不对。建议买之前问清楚卖家是否支持固件刷写,或者直接买刷好Sniffer固件的版本。
2.3.2 配置Wireshark与BT-Sniffer桥接
CC2540不像nRF那样有原生extcap插件,需要借助 btlejack 或 TI_Sniffer_Agent 做桥接。
# 使用btlejack桥接(推荐)
pip install btlejack
# 启动桥接服务
btlejack -i -d /dev/ttyACM0 # Linux/Mac
btlejack -i -d COM3 # Windows
# 在Wireshark中选择 "btlejack" 接口即可开始抓包
个人经验:CC2540抓Mesh包时,建议只抓37/38/39三个广播信道。因为Mesh的ADV bearer主要跑在这三个信道上。如果你非要抓数据信道,那得手动切换频率,非常麻烦。我一般只用它做快速验证,正式分析还是用nRF52840。
2.4 软件工具链全景图
为了让你更直观地理解整个工具链的协作关系,我画了一张图。
2.5 验证环境是否正常
硬件和软件都装好了,怎么知道能不能用?我教你一个快速验证的方法。
- 打开Wireshark,选择对应的抓包接口(nRF Sniffer或btlejack)
- 随便找一个蓝牙设备(比如你的手机)发送BLE广播
- 观察Wireshark是否出现
BLE Advertising Report或HCI Event包 - 如果能抓到包,说明环境搭建成功
验证要点:Mesh包的特征是ADV类型为0x2B(Mesh Message)或0x29(Mesh Beacon)。如果你看到这两个类型,恭喜你,环境完全OK。
2.6 常见问题与解决
我整理了几个新手最容易踩的坑,你遇到了直接对照排查。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Wireshark找不到nRF接口 | extcap插件未正确安装 | 检查 nrf_sniffer_for_ble.py 是否在extcap目录 |
| CC2540抓包时断时续 | USB供电不足或驱动冲突 | 换USB口,或卸载其他蓝牙驱动 |
| 抓到的包全是乱码 | 固件版本与Wireshark不匹配 | 升级nRF Sniffer到最新版 |
| Mesh包过滤不出来 | Wireshark未启用Mesh协议解析 | 在Wireshark中启用 Bluetooth Mesh 协议 |
重要提醒:如果你用的是虚拟机(VMware/VirtualBox),抓包可能会失败。因为USB设备直通到虚拟机后,延迟和丢包率会明显增加。我建议直接在宿主机上操作,或者用原生Linux系统。