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 应该是 抓包软件做的帧校验吧。
BLE广播数据的抓包解析的更多相关文章
- 蓝牙BLE: 蓝牙4.0 BLE广播数据解析(转)
BLE 设备工作的第一步就是向外广播数据.广播数据中带有设备相关的信息.本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析. 1. 广播模式 BLE 中有两种角色 Central 和 Per ...
- 【Android测试工具】Android抓包解析全过程
需求原因 在android开发中,遇到socket编程,无法从log日志中查看到与之通讯的socket发送和返回的数据包是什么,这里介绍一个工具,tcpdump工具和wireshark工具查看抓到的内 ...
- 使用Charles进行网络请求抓包解析
使用Charles进行网络请求抓包解析 0. 懒人的福音(⌐■_■)(破解版下载地址,记得安装java库支持) http://pan.baidu.com/s/1c08ksMW 1. 查看电脑的ip地址 ...
- BLE 广播数据解析
从上一篇GATT Profile 简介中提到过,BLE 设备工作的第一步就是向外广播数据.广播数据中带有设备相关的信息.本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析. 广播模式 BLE ...
- Fiddler怎么对IPhone手机的数据进行抓包分析
http://www.cr173.com/html/20064_1.html Fiddler绝对称得上是"抓包神器", Fiddler不但能截获各种浏览器发出的HTTP请求, 也可 ...
- Android抓包解析全过程
需求原因 在android开发中,遇到socket编程,无法从log日志中查看到与之通讯的socket发送和返回的数据包是什么,这里介绍一个工具,tcpdump工具和wireshark工具查看抓到的内 ...
- DTLS-PSK算法抓包解析
一.DTLS -PSK PSK 是DTLS 定义的密钥交换方案之一,相对于公钥证书方案(如 ECDHA_RSA) 来说,其具备更加轻量化.高效的优点: 而目前 PSK方案应用也比较广泛. 关于DTLS ...
- 使用Fiddler对Android手机的应用数据进行抓包分析
文章源自: http://blog.csdn.net/zshq280017423/article/details/8928616/ 对于Android开发的同事最头疼的事情莫过于真机抓包,然后Fidd ...
- 使用Fiddler对IPhone手机的应用数据进行抓包分析
原文出自: http://www.cr173.com/html/20064_1.html Fiddler能捕获ISO设备发出的请求,比如IPhone, IPad, MacBook. 等等苹果的设备. ...
随机推荐
- Python工程师面试题目
1.请尽可能列举python列表的成员方法,并给出一下列表操作的答案: len() 返回列表中的元素数量. max() 返回列表中的最大元素.最大元素的判断依据是列表中的对象类型.数字列表中的最大元素 ...
- 【Kubernetes】kube-dns 持续重启
kuberbetes部署和启动正常,但是kube-dns持续重启 使用命令 kubectl get pods --all-namespaces 得到结果 从图中可以看出kube-dns-c7d8589 ...
- [CTSC2007]数据备份Backup 题解
题意: 一维直线上有n个点,任取2k个互不相同的点组成k条链,求链的最小总长 思路: 1.最优时链不相交,相邻两两相减,将题目转化为:在n-1个数中取互不相邻的k个数使总和最小. 2.贪心取最小的“数 ...
- POJ1061青蛙的约会
Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...
- [luoguP3606] [USACO17JAN]Building a Tall Barn建谷仓(贪心 + 线段树)
传送门 把线段都读进来然后排序,先按右端点为第一关键字从小到大排序,后按左端点为第二关键字从小到大排序. 注意不能先按左端点后按右端点排序,否则会出现大包小的情况,如下: —————— ——— — ...
- [HDU3062]Party(2-sat)
传送门 2-sat问题,只需要判断yes或no 所以可以直接连边,缩点,判断同一组的是否在同一个块中. #include <cstdio> #include <stack> # ...
- input文本框的value属性在页面中不随输入的数据而变化
今天,在做试验遇到这么一个需求: 一个input文本框,输入值后将标签传到后台,在后台解析标签,发现value仍然是初值,不是我们改变后的值. 例如: <input name="&qu ...
- noj 2033 一页书的书 [ dp + 组合数 ]
传送门 一页书的书 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 53 测试通过 : 1 ...
- app后端搜索入门
现在人们的网络生活已经离不开搜索了,遇到不懂的问题,想知道的事情,搜索一下,就知道答案. 在app中,最常见的搜索情景就是搜索用户.只有几百,几千的用户量时,可以直接用用like这样的模糊查询,但是, ...
- 登录页面练习servlet
登录练习: 1创建登录页面 创建servlet进行登录页面请求 2点击登录完成操作 浏览器发送请求到服务器(用户信息+其他数据 )3服务器调用对应的servlet进行处理 设置响应编码格式 获取请求信 ...