从抓包分析看BLE ATT协议:手把手教你用nRF Sniffer解读空中交互的PDU
从抓包分析看BLE ATT协议手把手教你用nRF Sniffer解读空中交互的PDU蓝牙低功耗BLE技术已成为物联网设备通信的核心支柱而属性协议ATT作为其数据交互的基础层直接决定了设备间如何高效可靠地传输信息。对于协议分析工程师和逆向调试人员而言能够直观解读空中传输的原始数据包不仅是排查连接故障的利器更是深入理解蓝牙通信本质的钥匙。本文将带您使用nRF Sniffer这类专业抓包工具结合Wireshark分析技巧逐步拆解ATT层协议数据单元PDU的二进制奥秘让无形的射频信号转化为可读的操作逻辑。1. 搭建BLE协议分析环境1.1 硬件工具选型指南nRF Sniffer北欧半导体推出的低成本抓包方案支持BLE 4.x/5.x协议通过USB接口与Wireshark联动实时显示空中数据包Ellisys Bluetooth Analyzer商业级协议分析仪提供精确的时间戳和频谱分析功能适合企业级研发调试TI CC2540 Sniffer基于CC2540芯片的经典方案适合传统BLE 4.0设备分析提示nRF Sniffer固件需定期更新以支持最新蓝牙规范建议从Nordic官网获取v3.x以上版本1.2 软件环境配置# 安装Wireshark并添加BLE解析插件 sudo apt install wireshark git clone https://github.com/nordic-semiconductor/nRF-Sniffer-for-Bluetooth-LE.git cp -r nRF-Sniffer-for-Bluetooth-LE/3.0.0/* ~/.config/wireshark/plugins/配置完成后在Wireshark的Capture Interfaces中应能看到nRF Sniffer设备。关键参数设置建议参数项推荐值作用说明Channel Map0x7扫描全部3个广播信道PHY ModeLE 1M兼容BLE 4.x/5.x标准速率Pcapng Format启用保留完整抓包元数据2. ATT协议框架解析2.1 属性数据模型剖析BLE设备通过属性Attribute暴露数据接口每个属性包含四个核心要素Handle0x0001-0xFFFF16位唯一标识符相当于数据地址指针TypeUUID区分属性类别如0x2800主服务声明0x2803特征值声明0x2902客户端特性配置描述符Value实际存储的数据内容长度受ATT_MTU限制Permissions访问控制标志位包括读写权限Read/Write加密要求Encryption认证级别Authentication2.2 PDU通信规则矩阵ATT层定义六种基本交互模式构成完整的请求-响应机制PDU类型方向确认要求典型应用场景CommandClient→Server无快速写入操作RequestClient→Server需响应读取特征值ResponseServer→Client-返回请求结果NotificationServer→Client无心率测量数据推送IndicationServer→Client需确认关键状态变更提醒ConfirmationClient→Server-确认Indication已接收3. 实战抓包分析案例3.1 MTU交换过程解码在Wireshark中过滤btatt.opcode 0x02可捕获MTU交换请求。以下是一个典型交互流程客户端发起请求Opcode: 0x02 (Exchange MTU Request) Client Rx MTU: 0x00D3 (211 bytes)服务端响应# 解析响应PDU的Python示例 pdu b\x03\xA0\x00 # 原始字节流 opcode pdu[0] # 0x03表示Exchange MTU Response server_mtu int.from_bytes(pdu[1:3], little) # 0x00A0160结果协商双方取较小值本例为160字节作为后续通信的MTU3.2 特征值通知解析当设备发送Handle Value Notification时Opcode0x1B关键字段包括#pragma pack(1) typedef struct { uint8_t opcode; // 0x1B uint16_t handle; // 特征值句柄 uint8_t value[]; // 可变长度数据 } att_notification_pdu;在Wireshark中可观察到如下实际数据Attribute Opcode: Handle Value Notification (0x1B) Handle: 0x000E Value: 48656c6c6f (ASCII: Hello)3.3 长数据写入过程对于超过MTU限制的数据BLE采用Prepare Write队列机制。以下为写入128字节数据的抓包示例序号PDU类型参数说明数据分片1Prepare Write RequestHandle0x0012, Offset0Data[0:19]2Prepare Write Response返回相同偏移量确认-3...每次递增20字节偏移量Data[20:39]等7Execute Write RequestFlags1 (立即执行)-8Execute Write Response写入完成状态-4. 高级调试技巧4.1 错误代码速查表当收到Error Response PDUOpcode0x01时错误代码含义如下错误码宏定义触发条件0x01ATT_ERR_INVALID_HANDLE属性句柄不存在0x02ATT_ERR_READ_NOT_PERM读权限不足0x03ATT_ERR_WRITE_NOT_PERM写权限不足0x0DATT_ERR_INVALID_PDU协议格式错误4.2 自定义Wireshark着色规则通过View → Coloring Rules添加以下规则可提升协议分析效率# 高亮关键操作 btatt.opcode 0x0A || btatt.opcode 0x12 Cyan # 读/写请求 btatt.opcode 0x1B || btatt.opcode 0x1D Pink # 通知/指示 btatt.opcode 0x01 Red # 错误响应4.3 使用Python解析抓包数据以下脚本可提取pcapng文件中的ATT操作统计from pyshark import FileCapture def analyze_att_packets(pcap_path): cap FileCapture(pcap_path, display_filterbtatt) opcode_stats {} for pkt in cap: opcode int(pkt.btatt.opcode, 16) opcode_stats[opcode] opcode_stats.get(opcode, 0) 1 print(ATT PDU 统计:) for code, count in sorted(opcode_stats.items()): print(f0x{code:02X}: {count}次)在实际项目中发现多数连接问题源于MTU协商失败或权限配置不当。通过对比正常与异常场景的抓包数据往往能快速定位到缺失的Authentication位或过小的MTU设置值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2548173.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!