BLE协议栈为什么要分层?怎么理解BLE“连接”?如果BLE协议只有ATT层没有GATT层会发生什么? 1. 协议栈框架 一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。 标签: ATT, GAP, Link layer, GATT, L2CAP, BLE stack, 广播, 连接, BLE协议栈, 链路层 3. (3)通信信道 BLE 工作在 ISM 频带,定义了两个频段,2.4GHz 频段和 896/915MHz 频带。 BLE 工作在 2.4GHz 频段,仅适用 3 个广播通道,适用所有蓝牙规范版本通用的自适应调频技术。
本章介绍蓝牙协议(重点介绍:BLE)的基本特点、版本演进、协议的构成、等基础知识,本章重在了解,目的是对BLE协议有个大概的认知,即了解BLE协议栈的全貌。 我们常说的蓝牙4.0不等同于BLE,BLE只是蓝牙4.0的子集;蓝牙4.0是一个综合性协议规范。 BLE采用40个信道,每个信道间隔为2MHz,分为数据信道和广播信道;广播信道占用3个,用于发现设备、建立连接、广播数据;数据信道占用37个,用于已建立连接设备间的数据通信。 图片 03-链路层(LL) 低功耗蓝牙参考 《Core_v5.3.pdf》中 Part B: Link Layer Specification 章节部分,LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点 没有GATT,BLE协议栈也能跑,但互联互通就会出问题。
BLE安全之配对流程剖析(3) 上一章介绍了配对流程的第二阶段,剖析了配对第二阶段的配对算法的选择和鉴权方式的选择。 接下来就进入了ble配对的阶段三,在该阶段双方会根据生成的STK或LTK来生成其他的密钥,就是配对的密钥分配阶段。 1. 通过这个可以将BLE配对产生的配对密钥转化成经典蓝牙的密钥。 link key = h6(ILK, “lebr”) 如果两端的CT2都设置为1,则: ILK = h7(SALT, LTK) BR/EDR link key = h6(ILK, “lebr”) 3.
蓝牙BLE组成 BLE由三个主要构建模块组成:应用程序、主机和控制器。顾名思义,应用程序块是与蓝牙协议栈交互的用户应用程序。主机覆盖蓝牙协议栈的上层。控制器覆盖下层。 让我们再来看看BLE设备的3个构建模块:应用程序、主机和控制器: 应用程序是最高级别的,它负责包含与应用程序实现的实际用例相关的所有逻辑、用户界面和数据处理。 现在我们可以转到BLE设备的主机部分。 逻辑链路控制和适配协议(L2CAP) L2CAP负责两项任务:1、它需要来自上层的多个协议,并将它们封装成标准的BLE数据包格式(反之亦然)。 层负责或路由两个主要协议:属性协议(ATT)和安全管理器协议(SMP)。 属性协议(ATT) 属性协议(ATT)是基于设备呈现的属性的简单客户端/服务器协议。客户端从服务器请求数据,然后服务器将数据发送给它的客户端。
环境搭建 上面介绍了数据包和各层协议,接下来我们将使用Ubertooth One来捕获通信过程中的蓝牙数据包。 ? libbtbb-2015-09-R2.tar.gz cd libbtbb-2015-09-R2 mkdir build cd build cmake .. make sudo make install (3) (3)gatttool root@0xroot:~# gatttool -h Usage: gatttool [OPTION...] capture occurs. ubertooth-btle -f -ctest.pcap抓包&保存到本地 使用这条命令我们可以把设备捕获到的数据包保存到本地,完成后可导入wireshark进行数据包、协议分析 j2abro.blogspot.com.au/2014/06/analyzing-bluetooth-advertising-with.html http://cerescontrols.com/tutorials-3/
对 RxSwift 及 BLE 感兴趣的同学可以看看,或有所得。
特点:数据传输速度比蓝牙BR快2-3倍(最高2-3 Mbps)。 1.2. 应用场景 音频设备:蓝牙耳机、蓝牙音箱,提供稳定高质量的音频传输。 简化的协议栈:降低了开发成本和复杂性,提高了设备的兼容性和互操作性。 BLE技术的起源与基础版本 BLE技术起源于蓝牙4.0版本,该版本首次引入了低功耗蓝牙协议栈,旨在降低蓝牙设备的功耗,延长电池寿命。 特点:BLE以其低功耗著称,适用于不需要高数据传输速率但对功耗有严格要求的应用场景,如健康监测设备、智能家居控制等。BLE技术还具备快速连接与断开、短距离通信以及简化的协议栈等优势。 3.2. 传输速率 BR/EDR:最高传输速率可达3Mbps(EDR模式下),但在实际应用中可能因设备限制而有所降低。
Attribute Protocol(ATT)— GATT 在 ATT 协议基础上建立,也被称为 GATT/ATT。ATT 对在 BLE 设备上运行进行了优化,为此,它使用了尽可能少的字节。 // 使用此检查确定 BLE 是否支持在设备上,然后你可以有选择性禁用 BLE 相关的功能 if (! ---- 你的 app 能与 BLE 通信之前,你需要确认设备是否支持 BLE,如果支持,确认已经启用。 如果不支持BLE,那么你应该适当地禁用部分BLE功能。如果支持BLE但被禁用,你可以无需离开应用程序而要求用户启动蓝牙。使用BluetoothAdapter两步完成该设置。 连接到GATT服务端 ---- 与一个BLE设备交互的第一步就是连接它——更具体的,连接到BLE设备上的GATT服务端。
低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和概念的摘要 属性协议(ATT) -GATT建立在属性协议(ATT)之上。 这也称为GATT / ATT。 ATT经过优化,可在BLE设备上运行。 为此,它使用尽可能少的字节。 角色和职责 以下是Android设备与BLE设备互动时适用的角色和职责: 中央与外围。 这适用于BLE连接本身。 处于中心角色的设备扫描,寻找广告,并且外围角色中的设备进行广告。 初始化BLE蓝牙广播(广告) (1)广播的设置 (2)设置广播的数据 (3)设置响应的数据 (4)设置连接回调 private void initGATTServer() { onCharacteristicWriteRequest:device name = null, address = 74:32:DE:49:3C:28 3.onCharacteristicWriteRequest
BLE 考虑功耗, 使用了3个广播信道,顺序广播。 两个蓝牙设备想要建立连接, 第一步是 从机(server) 向外广播, 主机(client) 搜索到后发起请求。
characteristic的发现、读、写、通知(Notifing)、指示(Indicating) 及配置characteristic的广播 GATT可以被Application或其他Profile使用 其协议栈如下图 Characteristic由Characteristic Definition定义, 包含一个Characteristic声明、Characteristic属性、值、值的描述(Optional) 3 高层协议也可以定义协议相关的Characteristic Descriptors Characteristic Descriptors在服务端上是无序的,Client不应该理所当然 Characteristic Descriptors Declarations Permissions由高层协议定义或协议相关的 Client不应该理所当然地认为是可读的 Characteristic Descriptor Declarations Primary Service Discovery 3. Relationship Discovery 4. Characteristic Discovery 5.
最早了解 BLE 中继攻击是在 2022 年 3 月份,在网上搜了一堆关于 BLE 攻击方法的介绍,但当时并不知道无钥匙进入系统这么个东西,所以没感觉到中继攻击有什么大用途,当时接触的是些手环、灯泡这类的物联网设备 后来在 5 月份的时候 NCC 发布了 BLE 链路层中继解锁特斯拉的视频(https://youtu.be/5mdU4ksOc2w),发现原来 BLE 中继还挺有用的,就回头看了看之前搜集的资料,尝试搭建了 btlejuice 这个用来 BLE 中继攻击的工具(再吐槽一次 npm 安装东西太难了叭) 先把 btlejuice 以及 gattacker 这些中继攻击思路简单描述一下: 用两台带有蓝牙适配器的电脑 钥匙就无能为力了,与 NCC 发的视频实现的效果差距太大,便没有深入研究了 后来在网上冲浪的时候发现 NCC 在 hardware.io 分享了他们对 BLE 进行链路层中继的实现思路(https:/ 不会嵌入式开发,告辞 后来看到了小米的师傅们要在 KCon 分享他们实现的 BLE 链路层中继,斥巨资买了张门票(真就为了这个议题去的哈哈哈)然后心满意足的听了小米的师傅们对 BLE 攻击的分享(还说工具要在
文章目录 IGMP协议 定义 功能 IGMPv1 主机加入 主机离开 查询器选举 成员报告抑制机制 IGMPv2 主机加入 主机离开 查询器选举 成员报告抑制机制 IGMPv3 主机上维护的组播信息 路由器维护的组播信息 IRF形成的必要条件 配置步骤 相关命令 IGMP协议 定义 组播组管理协议 功能 管理主机加入和离开组播组 维护本地组播组信息表 IGMPv1 主机加入 路由器向开启了IGMP的端口发送查询报文,询问该接口下有没有组播接收者 ]igmp //进入IGMP视图 [h3c]igmp version 'version' //配置IGMP版本 [h3c-GigabitEthernet0/0]igmp enable / 堆叠组内的所有交换机会自动同步配置文件,但是成员交换机允许过程中产生缓存表项并不包含在配置文件中 热备份机制会自动吧运行过程中的缓存表项进行同步,比如邻居表、协议路由表、ARP表等。 [h3c]irf member 'member-id' renumber 'new-member-id'//更改IRF设备ID [h3c]irf-port-configuration active
三、IGMP的版本 到目前为止,IGMP 有三个版本:IGMPv1、IGMPv2、IGMPv3 IGMPv1 :主机可以加入组播组。没有离开信息(leave messages)。 IGMPv3 :与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。 IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包。 所有版本的IGMP 都支持ASM(Any-Source Multicast,任意信源组播)模型;IGMPv3 可以直接应用于SSM(Source-Specific Multicast,指定信源组播)模型 在交换机上部署了组播VLAN功能后,上游路由器不必在每个用户VLAN(VLAN2和VLAN3)内都复制一份组播流,而是数据流在组播VLAN(VLAN4)内复制一份后发送给二层设备。
索尼相机现在支持基于蓝牙低功耗 (BLE) 的控制协议。该接口允许客户端控制以及从支持 BLE 的遥控器获取状态。 遙控器 对于启用了索尼 BLE 的相机,发现过程相当简单。 例如 ILCE-7C 有8E3F7E15-AF80-1567-D946-A9190C2Cf98A 服务 支持的摄像机有多种操作模式,可确定哪些服务可操作。 相机控制服务目前正被索尼应用程序用于 BLE 到 Wifi 切换。它的许多特征似乎是为了支持FTP 服务器,但这并没有得到证实。 命令 回应 如果存在协议错误,IRC 将返回 0x0185 GATT 状态。如果拍摄照片或开始录制等过程,将发送各种通知。 原生的遥控器260元,有了协议,几十块钱就可以做一个,而且功能可以做的更多。 至于实现,我应该是写过。大家感兴趣的去翻翻。
,这里以“BLE-UART”这个设备为例,连接之后可以看到从设备支持4个服务,其中前面0x1800、0x1801、0x180A是蓝牙联盟定义的,后面的是自定义的,显示Unknown Service。 (5)特征读写 ble是通过特征传输数据的,特征又有不同的属性,ff05这个特征只支持写。 (6)修改MTU 通过Request MTU可以修改MTU,提高数据的传输量。 2、BLE调试助手 这个是南京沁恒开发的app,调试起来也比较方便,支持从机模式,用法和nRF Connect差不多。 (1)从机模式切换,默认是主机模式 (2)扫描从机 (3)连接从机 (4)查看服务与特征 (5)特征读写 (6)修改MTU 3、LightBlue 在ios上一般使用这个调试 (3)特征读写 (4)修改MTU 上面3个ble调试app,都可以使用,个人推荐nRF Connect和BLE调试助手。
射频通道,编号0-39,每个2M,分为广播通道和数据通道,广播通道是37,38,39,其余都是数据通道。
二、下面以一个简单地示例开始: proto3 文件:.proto syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; } 第一行声明当前使用的proto3版本协议语法(proto编译器默认使用proto2版本协议语法),声明必须为文件的第一行 2、字段约束 singular:更直观的可以用optional来释义,可选字段,0个或1个,proto3中未默认约束。 repeated:列表集合字段类型,可以包含 >=0 个字段元素。 3、int32, uint32, int64, uint64及bool是相互兼容的,只不过转换过程会产生值域变更。 4、sint32 和 sint64 是相互兼容的。 5、byte3存储值为有效UTF-8编码内容时与string相互兼容。 七、未知字段 未能对应解析的字段会存储于未知字段中。此机制在proto3中最初抛弃,v3.5版本重新引入。
Android BLE基础操作框架,基于回调,操作简单。包含扫描、多连接、广播包解析、服务读写及通知等功能。 该库是 BLE 操作的基础框架,只处理 BLE 设备通信逻辑,不包含具体的数据处理,如数据的分包与组包等。 //设置连接失败重试次数 .setConnectRetryInterval(1000)//设置连接失败重试间隔时间 .setOperateRetryCount(3)//设置数据操作失败重试次数 .setOperateRetryInterval(1000)//设置数据操作失败重试间隔时间 .setMaxConnectCount(3);//设置最大连接设备数量// 更多关于广播包解析可以参考Android BLE学习笔记中数据解析部分。
本文根据实际使用经验,介绍了每种抓包方案的环境配置与抓包方法,对比分析目前几种 BLE 的空口抓包方案(只讨论普通人用得起的,ellisys 这类神器摸都没摸过 Orz) PART1 方案一 ubertooth numpy python3-qtpy python3-distutils python3-setuptools 2、安装 libbtbb wget https://github.com/greatscottgadgets CC2540 是 TI(德州仪器)的一款芯片,优点是价格便宜,淘宝购买大概40,缺点同样是只能同时抓一个信道 TI 有配套的官方软件:Packet Sniffer,直接安装就行,安装好之后接上 CC2540 协议类型选择蓝牙就可以抓包了 方案三 Hollong + wireshark 纬图出品的 BLE 抓包工具,配合 wireshark 抓包操作简单,优点是同时抓三个广播信道,不会出现概率问题,价格大概在 800 左右 提供官方软件 找到Global Extcap path 里面的路径 把刚才的 extcap 文件夹里的内容拷贝过去 运行这条命令,若如下图所示这样就是成功了,Linux 下用 .sh nrf_sniffer_ble.bat