这个例子展示了如何生成和解码蓝牙®低能量L2CAP帧使用蓝牙的通信工具箱™图书馆®协议。
蓝牙核心规范(1)包括一个低能量(LE)版本低速率无线个人区域网络,这被称为蓝牙低能量(bie)或蓝牙智能。BLE堆栈包括:通用属性剖面(关贸总协定),属性协议(ATT),安全管理协议(SMP)、逻辑链路控制和适应协议(L2CAP)、链路层和物理层。祝福是添加到标准低能量的设备生成少量的数据,如通知警报在家庭自动化等应用程序使用,医疗、健身、和物联网(物联网)。
祝福的L2CAP层对应于较高的逻辑链路控制子层即(LLC)的数据链路层OSI参考模型。L2CAP高于PHY和链路层的祝福。BLE规范优化和简化了L2CAP相比,经典的蓝牙。
L2CAP在bie是负责:(我)建立逻辑连接(2)协议多路复用(3)分割和重新组装(iv)流控制/ '动态' L2CAP信道。
L2CAP层增加了一个L2CAP基本头更高层次的有效载荷,并将协议数据单元(PDU)下面的链路层。
L2CAP框架包括两类:数据帧和信号帧。有不同类型的帧内这两个类别的帧。的数据帧sub-categorized再次成B-frame(基本信息帧)LE-frame(低能量信息帧)。每一帧类型都有自己的格式。
一个通道标识符(CID)是本地名称代表一个逻辑通道端点在设备上。的协议,比如攻击力和SMP,这些通道固定通过蓝牙特别兴趣小组(团体)。特定于应用程序的配置文件,如网络协议支持概要(IPSP)和对象传输概要(OTP),这些通道金宝app动态分配。
信号帧使用一个固定的逻辑通道被称为信号通道(“0005”)和用于对等设备之间建立逻辑连接使用基于勒信贷流控制机制。这些信号帧也用于更新连接参数(奴隶延迟,连接超时,最小连接间隔和最大连接时间间隔)当连接参数请求程序不支持在链路层。金宝app
数据帧(B-frames和LE-frames)把上层载荷为“信息负载”的帧格式。B-Frames用于携带固定频道(攻击力和SMP和固定逻辑通道“0004”和“0006”分别)有效载荷。LE-frames是用来携带有效载荷通过动态创建逻辑渠道对特定于应用程序的配置文件,如IPSP和OTP。
这个例子演示了生成和解码的帧。支持其他的信号帧列表,查看金宝appCommandType
的属性bleL2CAPFrameConfig
对象。
1。流控制信贷:这个信号发送帧来创建和配置一个L2CAP两个设备之间的逻辑通道。
2。B-frames在固定频道(ATT, SMP等):这个框架是用于携带固定通道负载基本L2CAP模式。
3所示。LE-frames在动态通道(资料像IPSP, OTP等):这个框架是用于携带基于动态载荷LE信贷渠道的流量控制模式。
%检查的蓝牙协议的通信工具库%安金宝app装支持包。comm金宝appSupportPackageCheck (“蓝牙”);
您可以使用bleL2CAPFrame
函数来生成一个L2CAP框架。这个函数接受一个配置对象bleL2CAPFrameConfig
。这个对象配置所需的字段生成一个L2CAP框架。
信号帧的一代
生成一个信号帧,创建一个bleL2CAPFrameConfig
对象与ChannelIdentifier
设置为“0005”
。
cfgL2CAP = bleL2CAPFrameConfig (“ChannelIdentifier”,“0005”);
配置的字段:
%命令类型cfgL2CAP。CommandType =“流控制信贷”;%源通道标识符cfgL2CAP。SourceChannelIdentifier =“0041”;% LE学分cfgL2CAP。学分= 25
cfgL2CAP = bleL2CAPFrameConfig属性:ChannelIdentifier:“0005”CommandType:“流控制信贷”SignalIdentifier:“01”SourceChannelIdentifier:“0041”学分:25只读属性:没有属性。
生成一个“流量控制信贷”命令。
sigFrame = bleL2CAPFrame (cfgL2CAP);
B-frame代
生成一个B-frame(携带ATT PDU),创建一个bleL2CAPFrameConfig
对象与ChannelIdentifier
设置为“0004”
(ATT通道ID)。
cfgL2CAP = bleL2CAPFrameConfig (“ChannelIdentifier”,“0004”)
cfgL2CAP = bleL2CAPFrameConfig属性:ChannelIdentifier:“0004”只读属性:没有属性。
B-frame用于传输负载的攻击力上层。一条5字节长的ATT PDU用作载荷在这个例子。
有效载荷= [“04”;“01”;“00”;“FF”;“FF”];
生成一个L2CAP B-frame使用载荷和配置。
bFrame = bleL2CAPFrame (cfgL2CAP、载荷);
LE-frame代
生成一个LE-frame,创建一个bleL2CAPFrameConfig
对象与ChannelIdentifier
设置为“0035”
。
cfgL2CAP = bleL2CAPFrameConfig (“ChannelIdentifier”,“0035”)
cfgL2CAP = bleL2CAPFrameConfig属性:ChannelIdentifier:“0035”只读属性:没有属性。
一个LE-frame用于传输动态通道的负载。本例中使用一个2字节的有效载荷。
有效载荷= [“01”;“2”];
生成一个L2CAP LE-frame使用载荷和配置。
leFrame = bleL2CAPFrame (cfgL2CAP、载荷);
您可以使用bleL2CAPFrameDecode
函数来解码一个L2CAP框架。这个函数输出以下信息:
状态
:枚举类型blePacketDecodeStatus
,这表明L2CAP解码是否成功。
cfgL2CAP
:一个L2CAP框架配置类型的对象bleL2CAPFrameConfig
,其中包含解码L2CAP属性。
这个函数接受一个祝福L2CAP帧作为输入。
解码信号帧
[sigFrameDecodeStatus, cfgL2CAP] = bleL2CAPFrameDecode (sigFrame);%观察输出%解码成功如果比较字符串(sigFrameDecodeStatus“成功”)流(“L2CAP解码状态:% s \ n \ n”,sigFrameDecodeStatus);流(“收到L2CAP信号帧配置:\ n”);cfgL2CAP%解码失败其他的流(“L2CAP解码状态:% s \ n”,sigFrameDecodeStatus);结束
L2CAP解码状态:成功收到L2CAP信号帧配置:cfgL2CAP = bleL2CAPFrameConfig属性:ChannelIdentifier:“0005”CommandType:“流控制信贷”SignalIdentifier:“01”SourceChannelIdentifier:“0041”学分:25只读属性:没有属性。
解码B-frame
[bFrameDecodeStatus cfgL2CAP,负载]= bleL2CAPFrameDecode (bFrame);%观察输出%解码成功如果比较字符串(bFrameDecodeStatus“成功”)流(“L2CAP解码状态:% s \ n \ n”,bFrameDecodeStatus);流(“收到L2CAP B-frame配置:\ n”);cfgL2CAP流(的有效载荷由L2CAP B-frame是:\ n”);有效载荷%解码失败其他的流(“L2CAP解码状态:% s \ n”,bFrameDecodeStatus);结束
L2CAP解码状态:成功收到L2CAP B-frame配置:cfgL2CAP = bleL2CAPFrameConfig属性:ChannelIdentifier:“0004”只读属性:没有属性。负载由L2CAP B-frame是:有效载荷= 5 x2 char数组“04”“01”“00”“FF”“FF”
解码LE-frame
[leFrameDecodeStatus cfgL2CAP,负载]= bleL2CAPFrameDecode (leFrame);%观察输出%解码成功如果比较字符串(leFrameDecodeStatus“成功”)流(“L2CAP解码状态:% s \ n \ n”,leFrameDecodeStatus);流(“收到L2CAP LE-frame配置:\ n”);cfgL2CAP流(的有效载荷由L2CAP LE-frame是:\ n”);有效载荷%解码失败其他的流(“L2CAP解码状态:% s \ n”,leFrameDecodeStatus);结束
L2CAP解码状态:成功收到L2CAP LE-frame配置:cfgL2CAP = bleL2CAPFrameConfig属性:ChannelIdentifier:“0035”只读属性:没有属性。负载由L2CAP LE-frame是:有效载荷= 2 x2 char数组“01”“02”
这个示例使用blePCAPWriter
对象生成的pdu导出到文件中与.pcap扩展或.pcapng扩展。分析和可视化这个文件,使用第三部分Wireshark等数据包分析器。
预计L2CAP PCAP格式框架内封闭的链路层数据包,也希望生成的包和访问地址前缀。的helperBLEPrependAccessAddresshelper函数加访问地址生成的数据包。以下命令生成一个PCAP L2CAP帧生成的文件在这个例子。
%创建一个单元阵列的L2CAP帧l2capFrames = {sigFrame, bFrame leFrame};llPackets =细胞(1,元素个数(l2capFrames));为i = 1:元素个数(llPackets)%链路层头添加到生成的L2CAP框架cfgLLData = bleLLDataChannelPDUConfig (“LLID”,的数据(片段开始/完成));llDataPDU = bleLLDataChannelPDU (cfgLLData l2capFrames{我});%预谋访问地址。一个4字节访问地址是本例中使用llPackets{我}= helperBLEPrependAccessAddress (llDataPDU,“01234567”);结束
出口PCAP文件
创建一个对象的类型blePCAPWriter
并指定数据包捕获文件的名字。
%创建BLE PCAP作家file对象pcapObj = blePCAPWriter (“文件名”,“BLEL2CAPFrames”);
使用写
函数来编写所有祝福pdu PCAP文件。常数时间戳
指定PDU的捕获时间。在这个例子中,所有的pdu的捕获时间一样。
时间戳= 124800;%时间(以微秒为单位)%写所有的pdu PCAP文件为idx = 1:元素个数(llPackets)写(pcapObj, llPackets {idx},时间戳,“PacketFormat”,“位”);结束%的对象清晰的pcapObj;
您可以打开PCAP文件包含生成的L2CAP帧数据包分析器。的L2CAP帧解码数据包分析器与标准兼容的L2CAP帧生成的蓝牙协议的通信工具箱™库。捕获的L2CAP分析框架如下所示。
信号帧(流量控制信贷)
B-frame(携带ATT PDU)
LE-frame(携带动态通道负载)
这个例子演示了生成和解码L2CAP帧中指定的蓝牙(1)标准。您可以使用一个数据包分析器来查看生成的L2CAP帧。
这个例子使用这些特性:
bleL2CAPFrameConfig
BLE L2CAP框架:创建配置对象
bleL2CAPFrame
:祝福L2CAP帧的一代
bleL2CAPFrameDecode
:祝福L2CAP帧解码器
blePCAPWriter
:创建BLE PCAP或PCAPNG文件作者对象
这个示例使用辅助:
helperBLEPrependAccessAddress:链路层加PDU的访问地址
蓝牙®技术的网站。“蓝牙技术网站|蓝牙技术”的官方网站。一个ccessed July 8, 2020.https://www.bluetooth.com/。
“开发/ LibpcapFileFormat - Wireshark Wiki”。2020年7月8日通过。https://wiki.wireshark.org/Development/LibpcapFileFormat。
集团Tcpdump。“Tcpdump / Libpcap公共库。”一个ccessed July 8, 2020.https://www.tcpdump.org。