藍牙4.0BLE抓包(三) – 掃描請求和掃描響應

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包的數據,便於分析。

  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校驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章