版权声明:本文为博主原创文章,转载请注明作者和出处。    作者:强光手电[艾克姆科技-无线事业部]

1. 扫描请求和扫描响应

  广播包含扫描请求SCAN_REQ和扫描响应SCAN_RSP。

  • 扫描请求:由链路层处于扫描态的设备发送,链路层处于广播态的设备接收。
  • 扫描响应:由链路层处于广播态的设备发送,链路层处于扫描态的设备接收。

  处于扫描态的设备可以接收广播信道的报文,通过扫描可以侦听哪些设备正在广播。扫描分为主动扫描和被动扫描。主动扫描发送扫描请求给处于广播态的设备,并通过处于广播态的设备返回的扫描响应获取额外的数据。而被动扫描仅仅接收广播报文,不会发送扫描请求。

  扫描中有两个重要的时间参数需要注意:

  • 扫描窗口(scan window):一次扫描进行的时间宽度。
  • 扫描间隔(scan interval):两个连续的扫描窗口的起始时间之间的时间差,包括扫描休息的时间和扫描进行的时间。

  下图说明了扫描窗口和扫描间隔的关系和要求。

图1:扫描窗口和扫描间隔

1.1. 扫描请求

  扫描请求PDU载荷如下图所示,由ScanA(扫描设备地址)和AdvA组成(广播设备地址),ScanA是扫描设备的公共或随机地址(由TxAdd确定),AdvA是广播设备的公共或随机地址(由RxAdd确定)。

图2:扫描请求PDU载荷

  广播报文的报头中的TxAdd指示了扫描设备使用的是公共地址(Public Address)还是随机地址(Random Address)。

  • TxAdd = 0:公共地址。
  • TxAdd = 1:随机地址。

  RxAdd指示了广播设备使用的是公共地址(Public Address)还是随机地址(Random Address)。

  • RxAdd = 0:公共地址。
  • RxAdd = 1:随机地址。

1.2. 扫描响应

  扫描响应PDU载荷如下图所示,由AdvA(广播设备地址)和ScanRspData组成(扫描响应数据),AdvA是广播设备的公共或随机地址(由TxAdd确定)。

图3:扫描响应PDU载荷

  广播报文的报头中的TxAdd指示了广播设备使用的是公共地址(Public Address)还是随机地址(Random Address)。

  • TxAdd = 0:公共地址。
  • TxAdd = 1:随机地址。

  广播报文的长度域指示了载荷的字节数(AdvA和ScanRspData)。

2. SCAN_REQ和SCAN_RSP解析

2.1. 捕获SCAN_REQ

  按照《蓝牙4.0BLE抓包(一)》中的描述进行抓包,下面是我们捕获一个心率计的SCAN_REQ包。

图4:捕获的SCAN_REQ包

2.2. 分析SCAN_REQ

  为了方便分析,我们先取出这个SCAN_REQ包实际传输的数据,如图3中所示。心率计完整的广播报文如下:

  D6 BE 89 8E 83 0C 7F 0F 72 DD DF 68 DA B5 E9 D2 CC F3 BD BF 27

  在分析数据之前,再次说明:广播包含扫描请求和扫描响应,所以扫描请求和扫描响应得包格式遵循广播包的格式。

分析报文时,需要注意一下报文各个域的字节序。

2.1.1 接入地址

  D6 BE 89 8E:接入地址,对广播来说是固定值。注意一下这里的字节序,接入地址传输时是低字节在前的。

2.1.2 PDU

1). 83:广播报文报头。

  • bit0~bit3是0011,说明广播类型是SCAN_REQ,即扫描请求。
  • bit7(RxAdd)是1:说明广播设备使用的是随机地址。
  • bit6(TxAdd)是0:说明扫描设备使用的是公共地址。

    2). 0C:长度,表示SCAN_REQ报文的长度是12个字节。

    3). 7F 0F 72 DD DF 68:扫描设备的公共地址(报头里的TxAdd指示了这个地址是公共地址)。这里使用的实验设备是[艾克姆科技]的EN-nRF51DK开发板和小米3手机,扫描设备是小米3手机,在图3中可以看到该公共地址对应的是Xiao_mico_72。

    4). DA B5 E9 D2 CC F3:广播设备的地址(报头里的RxAdd指示了这个地址是随机地址)。

2.1.3 校验

   BD BF 27:24字节CRC校验。

2.3. 捕获SCAN_RSP

  按照《蓝牙4.0BLE抓包(一)》中的描述进行抓包,捕获一个心率计的SCAN_REQ包。

图5:捕获的SCAN_RSP包

2.4. 分析SCAN_RSP

  同样,在这里我们先取出SCAN_REQ包的数据,便于分析。

   DA B5 E9 D2 CC F3 61 6A 0F

2.4.1 接入地址

  D6 BE 89 8E:接入地址,对广播来说是固定值。注意一下这里的字节序,接入地址传输时是低字节在前的。

2.4.2 PDU

1). 44:广播报文报头。

  • bit0~bit3是0100,说明广播类型是SCAN_RSP,即扫描响应。
  • bit6(TxAdd)是1:说明广播设备使用的是随机地址。

2). :长度,表示SCAN_ RSP报文的长度是6个字节。

3). DA B5 E9 D2 CC F3:广播设备的地址(报头里的RxAdd指示了这个地址是随机地址)。

2.4.3 校验

   61 6A 0F:24字节CRC校验。

蓝牙4.0BLE抓包(三) – 扫描请求和扫描响应的更多相关文章

  1. 蓝牙4.0BLE抓包(二) – 广播包解析

    版权声明:本文为博主原创文章,转载请注明作者和出处.    作者:强光手电[艾克姆科技-无线事业部] 在使用EN-Dongle捕获和解析广播包之前,我们先了解一下BLE报文的结构,之后,再对捕获的广播 ...

  2. 蓝牙4.0BLE抓包(一) - 搭建EN-Dongle工作环境 使用EN-Dongle抓包 nRF51822

     版权声明:本文为博主原创文章,转载请注明作者和出处.           蓝牙4.0 BLE的开发过程中,使用抓包器进行抓包分析无疑会极大地提高我们的开发效率,同时能帮我们快速的定位问题.对于初学者 ...

  3. jmeter-Charles抓包显示的请求方式错误了,难道

    抓包显示的请求方式为get,但是get一直报错见上图 将get修改为post就正确了

  4. Wireshark网络抓包(三)——网络协议

    一.ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址. IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信: 在通 ...

  5. [日常] 使用TCPDUMP和Ethereal抓包分析HTTP请求中的异常情况

    在测试功能的过程中,出现这样一种现象.前端js发起ajax请求后,在浏览器的审查元素网络状态中可以看到status为pending,等15秒以后js会把当前超时的请求取消掉,变成了红色的cancel. ...

  6. 谷歌chrome浏览器和火狐firefox浏览器自带http抓包工具和请求模拟插件

    谷歌chrome浏览器自带http抓包工具 chrome://net-internals/ 谷歌chrome浏览器http请求模拟插件:postman 火狐http请求模拟插件:httprequest ...

  7. Mac 环境 下使用Charles 抓包Http/Https请求

    实现目标 在Mac 上 对 iOS  真机 和 模拟器 进行 Http/Https抓包 使用工具 Mac 上 Charles 4.2  安装 参考链接 1. 和 链接 2. 抓包 http 请求 (1 ...

  8. Fidller抓包分析post请求

    目的:抓包是为了最近做接口测试做准备,以前没有用过这个工具,最近来学下,但是网上很多文章了,所以不一一记录,有一部分参考即可 1.如何抓取想要的web端或者手机端包,已经有很多文章谢了,推荐的参考文章 ...

  9. 19. Jmeter抓包之浏览器请求

    web测试过程中我们经常需要抓包,通常我们使用fiddler或者Charles.但是jmeter也可以抓包,而且非常好用,闲话不多说,下面进入正题.下面用一个例子进行说明 需求:bing首页搜索南京测 ...

随机推荐

  1. wordpress Bloginfo()函数

    bloinfo($show); ‘name‘ – 显示在 设置 > 常规 中设置的“站点标题”. 该数据是从 wp_options 这个数据表中检索到的 "blogname" ...

  2. ffmpeg截取一段视频中一段视频

    ffmpeg  -i ./plutopr.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 ./cutout1.mp4 -y -ss ti ...

  3. c语言之字符串数组

    一.字符串与字符串数组 1.字符数组的定义 char array[100]; 2.字符数组初始化 char array[100] = {'a','b','c'};  //array[0] = 'a' ...

  4. Linux 常用命令(转)

    转自:https://www.cnblogs.com/gaojun/p/3359355.html 1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文 ...

  5. Python_13-Office文件数据操作

    目录: 1.1      安装win32com模块 1.2      Access数据库操作 1.2.1       建立db1.db数据库,设计一张表t_student_b 1.3      Exc ...

  6. codeforce467DIV2——D. Sleepy Game

    分析 这个题乍一看有点像之前在CF上做过的一道DP,也是两个人下棋,但是写着写着觉得不对···这个题是的最优策略只是player 1 如果有环则是draw,可以DFS的时候顺便判环(拓扑排序的方法), ...

  7. 十三.sorted

    排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的 ...

  8. Win10系统优化/设置脚本

    Win10系统优化/设置脚本 用了很长时间win10了,用的过程中,发现了一些问题,关于系统基本的优化,和个人的使用习惯设置等等,做成了一个脚本,可以一键设置win10的系统设置,结合DWS对Win1 ...

  9. lucene和solr

    我们为什么要用solr呢? 1.solr已经将整个索引操作功能封装好了的搜索引擎系统(企业级搜索引擎产品) 2.solr可以部署到单独的服务器上(WEB服务),它可以提供服务,我们的业务系统就只要发送 ...

  10. SP1557 GSS2 - Can you answer these queries II

    一开始看不懂题解,看懂了题解之后觉得还是挺妙的. 好多题解里都提到了HH的项链,但是我觉得关系并不大啊…… 先把所有询问离线下来按照右端点排序,按照询问的要求一个一个加入数字,怎么加入数字,我们设计一 ...