930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 9711|回复: 4

EN-Dongle:蓝牙BLE扫描请求和扫描响应抓包和分析

[复制链接]

52

主题

354

帖子

6545

积分

版主

Rank: 7Rank: 7Rank: 7

积分
6545
发表于 2016-8-4 15:07:12 | 显示全部楼层 |阅读模式
1. 扫描请求和扫描响应
  广播包含扫描请求SCAN_REQ和扫描响应SCAN_RSP。
扫描请求:由链路层处于扫描态的设备发送,链路层处于广播态的设备接收。
扫描响应:由链路层处于广播态的设备发送,链路层处于扫描态的设备接收。
  处于扫描态的设备可以接收广播信道的报文,通过扫描可以侦听哪些设备正在广播。扫描分为主动扫描和被动扫描。主动扫描发送扫描请求给处于广播态的设备,并通过处于广播态的设备返回的扫描响应获取额外的数据。而被动扫描仅仅接收广播报文,不会发送扫描请求。
  扫描中有两个重要的时间参数需要注意:
    1)扫描窗口(scan window):一次扫描进行的时间宽度。
    2)扫描间隔(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包的数据,便于分析。
  D6 BE 89 8E 44 06 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). 06:长度,表示SCAN_ RSP报文的长度是6个字节。
    3). DA B5 E9 D2 CC F3:广播设备的地址(报头里的RxAdd指示了这个地址是随机地址)。
2.4.3 校验
   61 6A 0F:24字节CRC校验。

回复

使用道具 举报

7

主题

22

帖子

89

积分

注册会员

Rank: 2

积分
89
发表于 2016-8-26 10:23:50 | 显示全部楼层
绝对值得收藏的帖子  谢谢楼主分享啊  赞赞赞
回复 支持 反对

使用道具 举报

1

主题

11

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2016-10-15 11:14:35 | 显示全部楼层
给你点个赞!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

GMT+8, 2024-11-21 18:13 , Processed in 0.093809 second(s), 23 queries .

快速回复 返回顶部 返回列表