第二章 抓包环境搭建:硬件选型与软件工具链

做蓝牙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示例程序,得先刷成抓包专用固件。

  1. 从Nordic官网下载 nRF-Sniffer-for-BLE_4.1.1.zip(或更新版本)
  2. 解压后找到 hex/nrf52840_xxaa_sniffer_for_ble.hex
  3. 用nRF Connect Programmer或J-Flash将hex文件烧录到DK板
  4. 烧录完成后,板子上的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从机模式。需要刷成抓包模式。

  1. 下载TI官方 BTool 或第三方 CC2540_Sniffer 固件
  2. 使用CC Debugger或SmartRF Flash Programmer烧录
  3. 烧录成功后,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 软件工具链全景图

为了让你更直观地理解整个工具链的协作关系,我画了一张图。

蓝牙Mesh抓包工具链架构图 蓝牙Mesh抓包工具链架构 硬件层 nRF52840 DK / TI CC2540 固件层 nRF Sniffer / BT-Sniffer 桥接/驱动层 extcap插件 / btlejack / TI_Sniffer_Agent 应用层 Wireshark(抓包 + 过滤 + 解密) 输出层 pcapng文件 / 解密后的Mesh数据包 说明:nRF52840 DK 通过 extcap 插件直接桥接;CC2540 需通过 btlejack 或 TI Agent 中转

2.5 验证环境是否正常

硬件和软件都装好了,怎么知道能不能用?我教你一个快速验证的方法。

  1. 打开Wireshark,选择对应的抓包接口(nRF Sniffer或btlejack)
  2. 随便找一个蓝牙设备(比如你的手机)发送BLE广播
  3. 观察Wireshark是否出现 BLE Advertising Report 或 HCI Event 包
  4. 如果能抓到包,说明环境搭建成功

验证要点: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系统。