BLE广播数据的抓包解析

前言:

报文由数据字节组成同时是按比特传输的,这就免不了牵涉到字节序的问题。

对于各个字节的传输,总是从最低位开始传输。如0x80是按00000001发送的,0x01是按10000000发送的。

同时大多数字节域又是从低字节开始发送的。如0x010203发送序列为110000000100000010000000

之所以说大多数,是因为并不是所有的数据都会从低字节发送从后面的抓取的广播报文中也能看不来。

另外由于抓包软件可能并不一定能完全知道哪些数据时从低字节开始发的,抓取的广播数据可能有一些需要按字节倒着读。

下面进入正题:

在链路层 BLE的广播报文分为如下几个部分。

|前导|接入地址|报头|长度|广播数据|校验|

一般抓包工具抓取到广播数据后显示出来的都会分段显示,所以你很容易看出各个段的数据,本文重要是 解析 广播数据段中的内容。

前导(1字节):不知道的可以理解为”同步头”,主要是用来配置接收机的自动增益控制。

接入地址(4字节):对于广播报文来说是固定的0x8e89bed6 (同时接入地址也决定前导的序列,在这里并不是重点,不做过多介绍)

报头(1字节):  依次为广播报文类型(4bit),保留位(2bit),发送数据地址类型(1bit),接收地址类型(1bit)

长度(1字节): 指示广播数据的长度(广播地址AdvA+数据AdvData)

广播数据:       我们需要解析的数据段,后面会详细说明。

校验(3字节):  CRC校验

下面 是Packet Sniffer抓到数据

从中可以明显的看出各个段的内容:

红色字段接入地址就是广播的固定接入地址0x8e89bed6。(抓包软件未转换字节序)

报头字段中:

广播类型是通用广播(Type为0),

地址类型都是public(TxAdd和RxAdd都为0)。

长度字段指示adv+AdvData长度

广播设备地址是我自己设定的

ble_gap_addr_t add={.addr_type=BLE_GAP_ADDR_TYPE_PUBLIC,

.addr={0x01,0x02,0x03,0x04,0x05,0x06}};

因为地址是48-bit address, LSB format.

所以真实地址为0x060504030201.

AdvDara中一大堆数据就是我们需要解析的。

下面是详细信息,其中有抓包软件加的帧头数据。

发现图片太小 就复制了一下内容

+----------------------------------------------------------+----------------- - - -

|     Packet sniffer frame header                            |

+--+-------------+-----------------------------+--------+

|info| Packet nbr| Time stamp                  | Length| Packet data

+--+-------------+-----------------------------+--------+----------------- - - -

| 01 | 04 00 00 00  | EB 01 B9 02 00 00 00 00   | 2D 00 | 2C D6 BE 89 8E
00 21 01 02 03 04 05 06 0B 09 4E 6F 72 64 69 63 5F 48 52 4D 03 19 34 12
02 01 06 07 03 0D 18 0F 18 0A 18 39 FE 57 2A A5

从Packet data开始

2C为packet  data总字节数

D6 BE 89 8E 为接入地址(字节序问题)

00为报头字段(通用广播类型,public地址)

21为长度字段的值,指示adv+AdvData的总字节数

01 02 03 04 05 06 为广播设备地址

之后便为重点需要解析的 AdvData 部分。首先还是需要知道这一部分的数据格式。

蓝牙说明书4.1中说明 数据格式为

|length|AD type|AD data|

即Advdata 都是由这种格式的数据段组成。

Length即为一小段数据的长度

AD type指示 AD Data数据的含义。

AD type的定义如下,

下面继续分析 后面的数据

0B告诉我们这一小段的数据长度为11字节

即09 4E 6F 72 64 69 63 5F 48 52 4D都属于这以部分

查上面的表 09指明AD type为完整的本地名称。
我定义的为”Nordic_HRM”十六进制就是4E 6F 72 64 69
63 5F 48 52 4D

接着后面 03代表接着的一小段数据位三个字节 那么后面的19 34
12都属于这一小段

19表示”外观”  34 12代表外观。 (外观特性是SIG定义的一组值,用来表示设备是普通手机,手环什么的)

再后面是02则 01 06属于这段

01代表 FLAG ,flag说明了物理连接功能,比如有限发现模式,不支持经典蓝牙等

·         bit 0: LE 有限发现模式

·         bit 1: LE 普通发现模式

·         bit 2: 不支持 BR/EDR

·         bit 3: 对 Same Device
Capable(Controller) 同时支持 BLE 和 BR/EDR

·         bit 4: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR

·         bit 5..7: 预留

即 06数据说明了 设备的连接功能为 普通发现模式并且不知道经典蓝牙

继续是  07 表明03 0D 18 0F 18 0A 18属于这一段

03查上面的表知道 后面的数据表示完整16bit uuid列表

ble_uuid_t
adv_uuids[] =

{

{0x180D,         BLE_UUID_TYPE_BLE},

{0x180F,         BLE_UUID_TYPE_BLE},

{0x180A,         BLE_UUID_TYPE_BLE}

};

就是我设置的广播UUID

最后39 FE 57 表示CRC校验。

2A A5 应该是 抓包软件做的帧校验吧。

原文地址:https://www.cnblogs.com/Free-Thinker/p/8611416.html

时间: 2024-10-31 20:54:43

BLE广播数据的抓包解析的相关文章

使用Fiddler对IPhone手机的应用数据进行抓包分析

原文出自: http://www.cr173.com/html/20064_1.html Fiddler能捕获ISO设备发出的请求,比如IPhone, IPad, MacBook. 等等苹果的设备.  同理,也可以截获Andriod,Windows Phone的等设备发出的HTTP/HTTPS. 前提条件: 安装Fiddler的机器,跟Iphone 在同一个网络里, 否则IPhone不能把HTTP发送到Fiddler的机器上来.建议安装最新版Fiddler: 配置Fiddler: 打开Fiddl

Fiddler怎么对IPhone手机的数据进行抓包分析

http://www.cr173.com/html/20064_1.html Fiddler绝对称得上是"抓包神器", Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求. Fiddler能捕获ISO设备发出的请求,比如IPhone, IPad, MacBook. 等等苹果的设备.  同理,也可以截获Andriod,Windows Phone的等设备发出的HTTP/HTTPS. 前提条件:安装Fiddler的机器,跟Iphone

使用Fiddler对Android手机的应用数据进行抓包分析

文章源自: http://blog.csdn.net/zshq280017423/article/details/8928616/ 对于Android开发的同事最头疼的事情莫过于真机抓包,然后Fiddler就可以帮助你解决这个难题, 下面是我在使用过程中使用的步骤: 1.   Fiddler下载地址(http://fiddler2.com/) 2.  安装到电脑,我的电脑系统是Win7 3.  打开Fiddler软件,界面和其他抓包软件大致一样,效果图如下: 4 . 下面我们就进入重点了,真机抓

DTLS-PSK算法抓包解析***

一.DTLS -PSK PSK 是DTLS 定义的密钥交换方案之一,相对于公钥证书方案(如 ECDHA_RSA) 来说,其具备更加轻量化.高效的优点:而目前 PSK方案应用也比较广泛. 关于DTLS协议可以看看前面的文章 DTLS要点解析 本次通过模拟的DTLS程序,对DTLS-PSK 握手流程进行抓包分析,以期加深对协议本身的理解. 二.完整握手 流程 Client Server ------ ------ 1.ClientHello --------> <-------- 2..Hello

使用Charles进行网络请求抓包解析

0. 懒人的福音(?■_■)(破解版下载地址,记得安装java库支持) http://pan.baidu.com/s/1c08ksMW 1. 查看电脑的ip地址 2. 手机上的相关设置 3. 这个时候开启了Charles 3.9.1,设置好手机时会出现以下提示 4. 真抓实干

抓包解析xml文件为json

protected void Button1_Click(object sender, EventArgs e) { string Phone = this.Txt_Con.Text; string url = "http://api.showji.com/Locating/www.show.ji.c.o.m.aspx?m=" + Phone; foreach (string item in GetHttpXml(url)) { TextBox1.Text += item + &quo

Wireshark数据抓包教程之Wireshark捕获数据

Wireshark数据抓包教程之Wireshark捕获数据 Wireshark抓包方法 在使用Wireshark捕获以太网数据,可以捕获分析到自己的数据包,也可以去捕获同一局域网内,在知道对方IP地址的情况下,捕获到对方的数据包. Wireshark捕获自己的数据包 如果客户端经过路由器直接上网,如图1.28所示.在该图中,PC机A安装Wireshark,可以在该主机上直接捕获自己的数据. 图1.28  在主机上捕获数据 Wireshark捕获别人的数据包 如果都在一个局域网内,而且知道别人的I

tcpdump 抓包 通过 Wireshark分析抓包文件

1. tcpdump的基本原理 1.1  tcpdump starce 的区别 在本机中的进程的系统行为调用跟踪,starce   是一个很好的工具:但是在网络问题的调试中,tcpdump 应该是一个必不可少的工具:能清晰分析网络通信的信息. 默认情况下,tcpdump 不会抓取本机内部通讯的报文   :根据网络协议栈的规定,对于报文,即使是目的地是本机(自己和自己通信),也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入内核,并且完成路由选择.[比如本机的TCP通信,也必须要sock

APP测试时不可忽视搭建代理服务器抓包测试的必要性

这几天测的一个app,后台从已有服务器搬迁到了阿里云,接口api之类的都没有变化,但测试时发现客户端始终无法使用,每次点击都无法获得服务器反馈 用python编写脚本调接口,没问题,返回数据一切正常,app代码也没有动过,唯一动过的地方就是后台网址. 纳闷,于是在本地电脑利用ccproxy搭建代理,然后在ipad的无线网络连接下面设置本地代理,然后开启wireshark针对app的数据进行抓包,数据包全部抓取到后,将与阿里云交互的数据与现有服务器交互的数据进行比对,发现用post请求调客户端登陆