文章目录
前篇博文介绍了如何调试嵌入式代码? 但对于通讯协议,我们要了解通讯过程的详细信息,需要获取通讯过程中交互的报文以及时间,如何抓取通讯报文呢?如何解析抓取到的报文呢?
一、如何抓取BLE 空口报文?
我们最常使用的以太网抓包工具有wireshark 和tcpdump,前者提供可视化界面,方便直观了解报文格式,后者侧重命令行工具,方便通过自动化脚本抓包。这些抓包工具可以抓取BLE / Wi-Fi 这类无线通讯协议报文吗?
对于以太网这类有线通讯协议,数据包的传送分发主要是通过路由器和交换机完成的,路由器和交换机分发数据包主要是靠维护的路由表和MAC 地址表获知数据包下一跳的分发路径的。对于BLE / Wi-Fi 这类无线局域网通讯协议,主从设备之间通讯并没有路由器或交换机,无线数据报文是如何传送转发的呢?
博文链路层通信模式和空口协议设计 介绍了BLE 广播通信与连接通信模式,广播通信是Advertiser 将数据包发送给附近所有的Scanner,而Scanner 可以接收到周围所有Advertiser 的数据包(包括过滤规则的需要符合过滤规则要求),所以抓取广播报文比较简单。
连接通信模式则是主从设备之间先建立连接,连接的本质 是通信双方之间记录并同步维护的状态构成的,比如对端设备的MAC 地址、绑定信息等,BLE 连接通信实际上就是只接收目标设备的数据报文,忽略掉非目标设备的数据报文,这是由协议层定义的。如果想抓取BLE 连接通信报文,需要修改协议层代码,让其在非连接模式下接收处于连接模式的通信报文,这种修改后的非标准协议代码通常配合专用的硬件使用(当然也可以使用标准硬件比如开发板配合非标准的sniffer 驱动代码使用,但驱动应与硬件匹配),比如BLE sniffer 设备。

Nordic 为方便抓取并分析BLE 数据报文,提供了BLE sniffer hex文件,可以烧录到开发板或者dongle 设备中使用,nRF Sniffer for BLE 配合Wireshark 的使用说明详见文档:nRF_Sniffer_BLE_UG_v3.2.pdf, Nordic 提供的nRF Sniffer for BLE 驱动程序以及适用的开发板或dongle 如下表:

比如采用nRF52840 Dongle 作为sniffer 硬件设备,sniffer_nrf52840dongle_nrf52840_7cc811f.hex 作为sniffer 驱动程序,可以使用nRF connect for desktop --> Programmer 工具借助nRF52840 Dongle 内置的bootloader_usb 代码烧录sniffer 驱动程序)。比如采用nRF52 DK 作为sniffer 硬件设备(板载J-Link 并引出SWD 接口),sniffer_nrf52dk_nrf52832_7cc811f.hex 作为sniffer 驱动程序,可以使用nrfjprog 或J-Flash工具烧录sniffer 驱动程序。
Sniffer 设备烧录适用的sniffer 驱动程序后,PC 端安装wireshark,并在线安装nRF Sniffer capture tool,添加并选用Wireshark Profile_nRF_Sniffer_Bluetooth_LE,就可以使用sniffer BLE 设备配合wireshark 抓取BLE 数据包了,详细步骤可以参阅nRF_Sniffer_BLE_UG_v3.2.pdf,抓取到的BLE 数据报文格式如下:

借助wireshark 和nRF Sniffer 抓取的数据报文,可以对其进行过滤,只显示我们关注的数据报文(常见过滤条件如下表,多个过滤条件可通过逻辑运算符&& 或 || 组合在一起使用)。Wireshark 除了显示数据报文的原始数据,还可以解析BLE 报文每个协议层每个字段的含义,不用来回查询Core Spec 即可获知当前报文中关键字段的值是否合适。
| Display filter | Description |
|---|---|
| btle.length != 0 | Filter that displays only packets where the length field of the Bluetooth Low Energy packet is not zero, meaning it hides empty data packets. |
| btle.advertising_address | Filter that displays only packets that have an advertising address (advertising packets). |
| btle | Protocol filter that displays all Bluetooth Low Energy packets. |
| btatt btsmp btl2cap |
Protocol filters for ATT, SMP, and L2CAP packets, respectively. |
如果连接双方配对或绑定了,也即BLE 交互数据报文加密了,在Wireshark --> Passkey / OOB Key 窗口输入6位配对码就可以解析加密的报文了(LESC 配对采用ECDH 密钥协商算法,sniffer 只靠6 位配对码无法计算出用于解密报文的共享密钥,还需要知道配对双方之一的私钥才能计算出配对双方加解密报文使用的共享密钥)。

Wireshark 可以显示抓取数据报文中每个字段的解析注释,也包含时间信息,但wireshark 是为分析TCP/IP 协议而生的,分析BLE 时序图、瞬时数据流量、信道频谱、网络拓扑等信息还是略显不足。如果想获取更详细直观的BLE 数据报文交互信息,可以使用Ellisys 来抓包分析BLE 数据报文,其抓取到的报文解析图示如下:

Ellisys 抓包需要借助专用的设备(蓝牙协议分析仪)比如Ellisys Bluetooth Explorer、Ellisys Bluetooth Tracker 等,这些专业设备成本大概二三十万,一般专业的蓝牙开发团队才会选择使用这些蓝牙分析仪。相比较而言,前面介绍的wireshark 配合nRF sniffer 的抓包分析方案成本或门槛低得多,一般简单的BLE profile/service 开发使用这种低成本的抓包分析方案也能满足需求,本文就使用这种方案介绍BLE 通信过程中数据报文的交互了。
二、BLE 通信报文是如何交互的?
从博文协议栈架构设计,我们知道BLE 协议栈类似TCP/IP 协议栈,也是分层设计的,从下到上依次是Physical Layer、Link Layer、L2CAP、Security Manager 或Attribute Protocol、GAP 或GATT 这几层,每层协议都有相应的header 和payload,BLE 数据包也是逐层协议字段封装嵌套的。

BLE Host 不同模块也不是同时工作的,GAP 主要负责广播通信与连接建立过程,Security Manager 主要负责通信双方之间的配对和绑定过程,GATT 主要负责服务发现、服务数据传输等连接通信过程,本文也分这几个过程简单介绍BLE 数据报文的封装与交互。
下文使用的软硬件环境如下:
- SDK project:.\nRF5_SDK_17.0.2_d674dde\examples\ble_peripheral\ble_app_hrs (s132_nrf52_7.2.0_softdevice.hex)
- BLE peripheral:nRF52 development kits (PCA10040)
- BLE central:nRF connect for mobile version 4.24 (Android phone)
- BLE sniffer:nRF52840 Dongle (sniffer_nrf52840dongle_nrf52840_7cc811f.hex) + Wireshark-win64-3.4.4
- Development Environment:Setup_EmbeddedStudio_ARM_v540b_win_x64 + Windows 10_x64
编译工程ble_app_hrs 并将其烧录到nRF52 DK 中(softdevice 也需要烧录进去),PC 端打开wireshark(先插上BLE sniffer)并选择nRF Sniffer for Bluetooth LE COM* 开始捕获周围的BLE 数据包,wireshark --> nRF Sniffer toolbar --> Device 选择“Nordic_HRM” 设备只抓取该设备发送或接收的数据包。
手机端打开nRF connect 扫描并连接“Nordic_HRM” 设备,点击“Enable CCCDs” 使能notifications,为了看到更多LL Control Packet 可以点击“Request MTU”、“Request connection priority”、“Set preferred PHY” 等以更新MTU、connection parameters、PHY 等。为了抓取配对绑定过程的交互报文,可以点击"Bond"(工程ble_app_hrs 默认使用LE Secure Connections pairing with Just Works)手机端弹窗“配对请求” --> 点击“配对” ,Nordic_HRM 设备与手机完成配对与绑定过程。

Wireshark 借助BLE Sniffer 抓取到了上述过程的交互报文,在双方完成配对和绑定过程后,Wireshark 抓取到的报文提示“Encrypted packet decrypted incorrectly (bad MIC)”,也即无法解密抓取到的加密报文。这说明BLE 4.2 之后使用的LE Secure Connections pairing 安全性大幅提升,密钥协商与加密报文可以防止被嗅探泄密,我们如何分析LESC 配对加密后的报文呢?这个问题下文再解答,我们先简单分析目前抓取到的报文。
2.1 GAP Discovery and Connection establishment procedures
BLE peripheral “Nordi
本文详细介绍了如何使用BLE sniffer工具,如Wireshark和nRF Sniffer,抓取并分析BLE空口报文,包括GAP、GATT、LESC配对过程。内容涵盖连接建立、报文交互、安全连接建立等,适用于BLE设备的开发与调试。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



