当前位置: 首页 > article >正文

别再死记硬背ATT报文了!用Wireshark抓包实战,带你搞懂BLE通信里Handle和UUID的映射过程

实战拆解BLE通信用Wireshark透视Handle与UUID的动态映射当你第一次看到BLE设备通信时那些十六进制数字在屏幕上闪烁就像在看天书。Handle、UUID、ATT报文——这些概念在文档里写得清清楚楚但真正抓包分析时却总感觉少了点什么。作为嵌入式开发者我们需要的不是死记硬背协议字段而是能亲眼看到这些抽象概念如何在真实通信中活起来。1. 搭建BLE抓包实验环境工欲善其事必先利其器。要观察BLE通信细节我们需要一套可靠的抓包工具链。不同于WiFi抓包BLE嗅探需要特殊硬件支持因为普通网卡无法捕获BLE广播信道。推荐硬件配置方案nRF Sniffer北欧半导体推出的专用BLE嗅探器价格约$50支持2.4GHz频段全信道捕获TI CC2540 USB Dongle搭配Wireshark使用成本更低但功能稍弱Ubertooth One开源硬件方案适合喜欢DIY的开发者软件方面WiresharkBT Shark插件是最佳组合。安装完成后需要特别注意# Linux下需要添加用户组权限 sudo usermod -aG wireshark $(whoami) sudo chmod x /usr/share/wireshark/extcap/btbb提示捕获BLE通信时建议将设备放置在距离嗅探器1米范围内避免信号衰减导致丢包。同时关闭周围其他2.4GHz设备如WiFi路由器以减少干扰。常见问题排查表现象可能原因解决方案无法识别设备驱动未安装执行lsusb确认设备VID/PID捕获到乱码信道配置错误在Wireshark中设置正确的PHY模式只有广播包嗅探器功率不足调整天线方向或增加信号放大器2. 解剖BLE连接建立过程启动抓包后让我们观察一次完整的BLE连接建立过程。以智能手环连接手机为例你会看到三个阶段的关键交互广播阶段设备持续发送ADV_IND报文包含设备地址随机或公共广播数据Service UUID、设备名称等发射功率指示Tx Power连接请求主机发送CONNECT_REQ报文其中关键字段包括struct { uint8_t initA[6]; // 发起方地址 uint8_t advA[6]; // 广播方地址 uint32_t accessAddr; // 接入地址 uint16_t crcInit; // CRC初始值 uint8_t hopIncrement; // 跳频增量 } ll_connect_req;参数协商连接建立后立即进行的两项关键协商MTU大小通过Exchange MTU Request/Response确定连接间隔影响功耗的关键参数典型值为15-45ms在Wireshark中过滤btle可以看到完整的握手过程。特别要注意的是此时尚未涉及任何属性操作这些都是L2CAP层的基础工作。3. 属性发现UUID到Handle的映射实战这才是真正精彩的开始。当基础连接建立后主机会发起属性发现流程目的是获取从设备属性表中UUID与Handle的映射关系。这个过程主要通过两种报文实现Find Information Request/Response流程主机发送Find Information Request指定Handle范围通常0x0001-0xFFFF从机回复Find Information Response包含格式字段和Handle-UUID对列表在Wireshark中一个典型的响应报文解析如下Attribute Protocol Opcode: Find Information Response (0x05) Format: UUID16 (0x01) Data: Handle: 0x0001, UUID: 0x2800 (Primary Service) Handle: 0x0002, UUID: 0x2803 (Characteristic) Handle: 0x0003, UUID: 0x2A00 (Device Name) ...Read By Group Type Request流程用于发现主要服务Primary Service响应中包含服务起始/结束Handle特别适合快速定位特定服务如电池服务0x180F实际操作中这两个过程往往是交替进行的。我曾在调试一个医疗设备时发现某些厂商实现会故意打乱Handle顺序此时就需要结合两种发现方法才能完整重建属性表。4. 属性操作Handle的实际应用获得映射表后主机就可以高效地操作属性了。让我们通过真实抓包分析几个典型场景场景1读取设备名称主机发送Read Request指定Handle 0x0003从机回复Read Response携带UTF-8格式的设备名称场景2写入配置参数# 模拟写入操作 def write_characteristic(handle, value): pkt struct.pack(BHB, 0x12, handle, len(value)) value # Write Request send(pkt) resp recv() # 等待Write Response return resp[0] 0x13 # 确认操作码场景3订阅通知主机需要写入CCCDClient Characteristic Configuration Descriptor通常该Handle 特征值Handle 1写入0x0001启用Notify0x0002启用Indicate在分析一个智能灯泡的通信时我发现了一个有趣的现象当同时订阅多个特征时从机居然会重新排列Handle顺序以优化通知效率。这提醒我们Handle的稳定性只在单次连接中保证重新连接后可能变化。5. 高级技巧与异常排查真实的BLE世界远非理想状态。以下是几个实战中积累的经验技巧1过滤特定特征的通信btatt.handle 0x0012 || btatt.handle 0x0013技巧2解析长特征值当属性值超过MTU时会触发分片传输。观察Read Blob Request/Response序列Read Blob Request: Handle0x0015, Offset0 Read Blob Response: Partial Value (first 22 bytes) Read Blob Request: Handle0x0015, Offset22 Read Blob Response: Partial Value (next 22 bytes) ...常见异常处理表错误码含义解决方案0x01无效Handle重新执行属性发现0x02权限不足检查属性权限标志0x0D值超长使用分片读取/写入最近调试一个运动手环时就遇到了0x0D错误。通过Wireshark发现是厂商固件错误计算了特征长度最终通过更新固件解决。这再次证明协议分析工具不仅是学习手段更是解决实际问题的利器。6. 从抓包到实现逆向工程案例掌握了这些技能后你甚至可以逆向分析第三方设备的通信协议。我曾用以下步骤成功对接了一个未公开协议的温湿度计捕获设备与官方App的完整交互筛选出所有Write Request标记可疑的写入操作交叉比对不同操作时的数据变化通过多次试验验证参数含义例如当发现写入特定Handle的数据与设置温度值呈线性关系时Write Request to Handle 0x001A Data: 0x01 0x42 → 设置温度为22°C (0x4266, 66/322)这种实战经验是任何文档都无法替代的。现在当我再看BLE通信时那些十六进制数字不再是冰冷的数据而是一场精心编排的协议芭蕾——每个字段都在其位置上翩翩起舞共同演绎着无线通信的优雅与精确。

相关文章:

别再死记硬背ATT报文了!用Wireshark抓包实战,带你搞懂BLE通信里Handle和UUID的映射过程

实战拆解BLE通信:用Wireshark透视Handle与UUID的动态映射 当你第一次看到BLE设备通信时,那些十六进制数字在屏幕上闪烁,就像在看天书。Handle、UUID、ATT报文——这些概念在文档里写得清清楚楚,但真正抓包分析时,却总感…...

【开题答辩全过程】以 基于Android的个人财务管理系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

零基础玩转物联网:借助快马ai生成带详细注释的esp8266wifi连接新手教程代码

最近在折腾物联网项目,发现ESP8266这个WiFi模块特别适合新手入门。作为一个小白,刚开始接触硬件编程时真的是一头雾水,好在发现了InsCode(快马)平台,它能根据自然语言描述直接生成带详细注释的代码,大大降低了学习门槛…...

[特殊字符] 为什么99%的数字孪生都是“假的”?——镜像视界三维重构与视频反演技术重塑空间智能底层逻辑

🚀 为什么99%的数字孪生都是“假的”?——镜像视界三维重构与视频反演技术重塑空间智能底层逻辑如果你接触过数字孪生项目,或者看过相关展示系统,大概率见过这样一种典型场景:一个极具视觉冲击力的三维城市或工业模型&…...

零基础快速入门前端蓝桥杯Web应用开发 DOM 核心知识点(适配省赛/国赛高频考点)(可用于备赛蓝桥杯Web应用开发)

DOM 是蓝桥杯 Web 赛道的必考核心,贯穿所有实操编程题,从基础元素获取到复杂交互、性能优化均有覆盖,以下按考点优先级和模块完整梳理,适配历年真题考情。 一、DOM 基础认知与元素获取(所有题的前置基础,1…...

深度解析:智能体认知动力学

引言:智能体认知的变革在人工智能从 "大炼模型" 转向 "大用模型" 的关键时期,张家林的《智能体认知动力学导论:从生成式控制到拓扑几何求解》(2026 年版)如同一颗投入平静湖面的巨石,激…...

3步解锁VR视频自由:让3D内容在任何设备重生

3步解锁VR视频自由:让3D内容在任何设备重生 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_mirrors/vr/V…...

OpenClaw+ollama-QwQ-32B自动化写作:从指令到公众号草稿全流程

OpenClawollama-QwQ-32B自动化写作:从指令到公众号草稿全流程 1. 为什么需要自动化写作助手 作为一个技术博主,我每周都要产出2-3篇原创文章。最痛苦的环节不是写作本身,而是那些重复性的准备工作:收集资料、整理格式、调整排版…...

别再只会用ST-Link了!手把手教你用串口给STM32F103C8T6远程更新固件(IAP实战)

突破有线束缚:基于串口的STM32F103C8T6固件无线更新实战指南 当你的STM32开发板被嵌入产品外壳深处,当生产线上的设备需要批量升级,当野外部署的传感器需要修复漏洞——传统ST-Link烧录方式立刻显得笨拙不堪。本文将揭示如何仅用5元的USB转TT…...

腾讯小龙虾使用指南

腾讯小龙虾使用指南腾讯小龙虾是一款集成了多种实用功能的工具,广泛应用于数据分析、自动化处理和团队协作等领域。以下指南将详细介绍其核心功能、操作方法和最佳实践。安装与配置下载腾讯小龙虾的安装包,支持Windows、Mac和Linux系统。运行安装程序后&…...

AI Agent交互设计避坑指南:从Manus到Cursor的7个实战技巧

AI Agent交互设计避坑指南:从Manus到Cursor的7个实战技巧 当AI Agent从简单的指令执行者进化为能自主规划、调用工具并修正错误的"数字伙伴"时,交互设计的复杂度呈指数级增长。去年某知名设计团队调研显示,78%的AI产品失败案例源于…...

Tessent Shell双Pass插入策略深度解读:为什么MemoryBIST要先于EDT/OCC插入?

Tessent Shell双Pass插入策略:MemoryBIST优先于EDT/OCC的技术本质解析 在芯片测试领域,Tessent Shell的双Pass插入流程(Two-Pass Insertion Process)是一个被广泛采用却鲜少深入探讨的核心方法论。当工程师首次接触"先Memory…...

Vue项目中优雅集成turn.js实现3D翻书特效

1. 为什么选择turn.js实现3D翻书效果 第一次在产品手册里看到3D翻页效果时,那种纸张自然弯曲的物理质感让我眼前一亮。作为从业十年的前端开发者,我测试过多种实现方案:纯CSS的transform虽然简单,但缺少页面厚度和阴影细节&#…...

eUICC 配置文件结构 (Profile Structure) 的核心组件与权限管理解析

1. eUICC配置文件结构入门指南 想象一下你的手机SIM卡突然变成了一张"万能卡"——这就是eUICC技术带来的变革。与传统SIM卡不同,eUICC(嵌入式通用集成电路卡)最神奇的地方在于它能远程切换不同运营商的配置文件(Profil…...

NoFences:重构桌面空间的区域化引擎

NoFences:重构桌面空间的区域化引擎 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 副标题:三步打造个性化桌面系统 痛点分析:你的桌面是…...

思源宋体:七重字体音阶如何重塑中文数字美学

思源宋体:七重字体音阶如何重塑中文数字美学 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 当数字界面与中文排版相遇时,你是否有过这样的困惑:为什…...

告别英文界面:VSCode 最新版中文语言包安装与配置全攻略(Windows/macOS通用)

告别英文界面:VSCode 最新版中文语言包安装与配置全攻略(Windows/macOS通用) 作为一名长期使用VSCode的开发者,我深知英文界面给非英语母语用户带来的困扰。菜单栏里那些专业术语、设置项中的生僻词汇,常常让我们在开…...

springboot-vue+nodejs 的酒店客房预定管理系统的设计与实现

目录技术栈选择系统模块划分后端实现前端实现中间层实现数据库设计支付集成测试与部署项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 Spring Boot 作为后端框架,提供 RESTful API 接口;Vue.…...

书匠策AI:解锁毕业论文写作新姿势,你的学术“超级大脑”已上线!

毕业季的钟声敲响,论文写作的“战役”也随之打响。面对堆积如山的文献、错综复杂的逻辑框架,以及那令人抓狂的格式要求,你是不是也感到力不从心,甚至开始怀疑人生?别怕,今天咱们就来认识一位学术界的“超级…...

Qwen3-32B-Chat中文优化:提升OpenClaw本地任务理解准确率

Qwen3-32B-Chat中文优化:提升OpenClaw本地任务理解准确率 1. 为什么需要优化本地模型的中文理解能力 去年冬天,当我第一次尝试用OpenClaw自动化整理电脑上的文件时,遇到了一个令人哭笑不得的场景。我对它说"把上周下载的PDF文件按日期…...

告别80类限制!用YOLO-World+CLIP实现‘指哪打哪’的任意物体检测(保姆级教程)

突破类别限制:YOLO-World与CLIP联动的开放词汇检测实战 想象一下,当你需要检测一张照片中"左手边的马克杯"或"书架第三层的编程书籍"时,传统物体检测模型会告诉你:"抱歉,这不在我的80类识别范…...

从仿真到实物:音频功率放大器PCB设计前的Proteus验证全流程

从仿真到实物:音频功率放大器PCB设计前的Proteus验证全流程 在硬件开发领域,音频功率放大器的设计往往需要经历多次迭代才能达到理想性能。传统开发流程中,工程师们常常需要反复制作PCB原型并进行实测,这不仅耗时耗力,…...

订单日记×禧巢汇家居:共同打造行业数字化标杆

一、客户背景 禧巢汇(上海)家居科技有限公司,成立于2025年,位于中国(上海)自由贸易试验区,是一家以从事销售家具为主的企业。 在业务不断壮大的过程中,面临订单处理效率低、统计数据麻烦等问题,需要一种既能提升运营效…...

Windows 11三指拖拽功能完全配置指南:从驱动安装到手势优化

Windows 11三指拖拽功能完全配置指南:从驱动安装到手势优化 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersD…...

深入解析PyTorch中.pth文件的保存与加载机制

1. 揭开.pth文件的神秘面纱 第一次接触PyTorch时,看到那些以.pth结尾的文件,你是不是也和我当初一样充满疑惑?这些看似普通的文件,实际上是PyTorch模型持久化的关键。简单来说,.pth文件就像是给AI模型拍的一张"照…...

Switch视频播放完全指南:使用wiliwili实现离线媒体娱乐

Switch视频播放完全指南:使用wiliwili实现离线媒体娱乐 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端,目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili …...

终极指南:如何使用爱享素材下载器轻松获取多平台资源

终极指南:如何使用爱享素材下载器轻松获取多平台资源 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcode.com/…...

Xftp访问服务器文件夹报错?可能是你Xshell打开的方式不对(附正确操作截图)

Xftp访问服务器文件夹报错?可能是你Xshell打开的方式不对(附正确操作截图) 当你使用Xftp连接服务器时,突然遇到"无法显示远程文件夹"的报错,这往往不是Xftp本身的问题,而是权限和会话上下文在作…...

Harmonyos应用实例228:数学文化与数学史

10. 数学文化与数学史 功能简介:展示数学发展史上的重要事件、数学家及其贡献,通过时间轴和互动展示,介绍数学文化的发展历程。支持按时期、地区筛选,帮助学生了解数学的历史背景和文化价值。 ArkTS代码: // 定义类型接口 interface Mathematician {name: stringperiod…...

YOLOv8+DCNv3实战避坑:从‘RuntimeError: Not implemented on the CPU’到GPU部署成功

1. 环境准备与版本匹配 在开始YOLOv8与DCNv3的集成之前,环境配置是第一个需要跨过的门槛。我遇到过不少开发者在这个阶段就栽了跟头,主要原因就是版本兼容性问题。根据实测经验,这里有几个关键点需要注意: 首先是CUDA版本的选择。…...