蓝牙学习五(广播包分析wireshark)

1.简介

        软件工具:wireshark

        硬件抓包工具:nrf52840 dongle

2.数据包分析

        使用wireshark抓到的数据包分为两个部分,一部分是软件自己添加的内容,另一部分才是广播出来的数据

 

 2.1软件添加部分

        软件添加的大部分内容可以不关注。这里需要关注的内容如下:

         这里主要关注信道时间戳

        还记得在上一章的内容吗?蓝牙总共有40个信道,而广播是在373839三个信道依次发送。且广播间隔不超过10ms。不记得得话,可以回去复习一下。蓝牙学习四(广播)_t_guest的博客-CSDN博客

         这里我们截取三个相邻的广播包来分析一下:

         上边截取了相邻的三个广播数据包。可以看到1号的信道为37,开始到结束时间为296us。2号的信道为38,开始到结束时间为296us。3号的信道为39,开始到结束时间为296us。1号到2号的间隔为1000us左右,2号到3号的间隔为1000us左右。

        可以看到,此时广播是从37信道开始依次为37、38、39信道。当在39信道广播数据后,收到了SCAN_RSP。此时则停止广播。下次再进行广播的话,又从37信道开始

         如果说在一次广播事件中,没有广播到39信道就收到SCAN_RSP会如何呢?上一章我们也说过,就算收到了SCAN_RSP,依旧会继续广播。见下图:

 

 

        从上图可以看到,1号广播是37信道,并且在37信道接收到了SCAN_RSP。而此时广播事件并没有停止,而是继续在38、39信道进行广播。这也与上一章我们介绍的相同。

 2.2 广播数据内容

        2.2.1 非定向可连接广播事件(ADV_IND)

         

         蓝色数据部分就是真是广播的内容。这里进行拆分。总共分为6部分。

       Access Address(目标地址):

        4字节,小端。上图的值为 0x8e89bed6。所以BLE设备的广播帧都是使用这个地址。

         PDU Header(PDU 包头)

        PDU Header 虽然只有2字节。但是包含了很多内容。

        PDU Header拆分如下:

         PDU type为广播类型:

        ADV_IND:非定向可连接广播,即通用广播

        ADV_DIRECT_IND:定向可连接广播,即快速广播

        ADV_NONCONN_IND:非定向必可连接广播,即不能建立连接的广播

        ADV_SCAN_IND扫描帧,是由scanner(手机、平板、PC)发出的。主动扫描时使用。

        SCAN_REQ扫描请求帧,是由scanner(手机、平板、PC)发出的。只在scanner想从advertiser获取更多的广播数据的时候才由scanner发出。

        SCAN_RSP:当advertiser收到SCAN_REQ时的回应

        CONNECT_REQ(CONNECT_IND):scanner(手机、平板、PC)向advertiser发送的连接请求

        本次抓的数据,使用的就是ADV_IND。

         Advertising Address (广播设备MAC地址)

         Advertising Data (广播包数据)

        广播包数据都是以 长度+内容来表示的。比如这里我们抓的数据。

         02 01 06为一组,11-00为一组。

        长度为02,01表示指令类型, 表示当前设备不支持经典蓝牙,是通用可发现模式。

         长度为0x11(17),0x16表示为服务数据。后续内容为在程序中组包的内容。

        CRC(CRC校验值)

        广播数据内容的校验值

        2.2.2扫描应答(SCAN_RSP)

 

         数据结构与ADV_IND是相同的,这里不再重复介绍。直说关键点。

        PUD type:显示为0100,即为SCAN_RSP

         与ADV_IND不同的是,SCAN_RSP中的advertising data变成了Scan Response Data

        因为SCAN_RSP是对SCAN_REQ的回应,所以其中会包含一些其他的信息。这些信息是程序中自己设置的。此次抓的包中内容为外貌设备名称。scanner也就是获得了这些内容,才知道扫描到的设备是什么类型,叫什么名字。

        2.2.3连接请求(CONNECT_REQ/CONNECT_IND)

        连接请求包的格式是固定的:

         通过wireshark抓取到的连接请求包如下图: 

       

        Access Address:还是我们的老熟人,固定广播地址

        Packet Header:包含了PUD类型为连接请求包(Connect_ind),发送地址接收地址类型。

        Initiator Address:初始地址,也就是主机的地址

        Advertising Address:广播者地址,也就是设备的MAC地址

        Link Layer Data:负载信息,可以展开介绍。

 

         Access Address:接入地址

        CRC Init:CRC校验

        Window Size:传输窗口大小,2.5ms

        Window Offset:传输窗口偏移,2.5ms

        Interval:连接间隔30ms

        Latency:潜伏周期0

        Timeout:连接最大超时时间5000ms

        Channel Map:信道映射,可用的信道为1,不可用的为0.

         Hop:调频增加(跳频算法使用)

        Sleep Clock Accuracy:主机睡眠时间精度

        Connect_IND数据包中的一些信息,在Nrf connect中也是可以看到的。

 

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Wireshark是一款开源的网络协议分析工具,可以对网络数据进行捕获和分析。而蓝牙(Bluetooth)是一种无线通信技术,适用于短距离数据传输。 在Wireshark中,我们可以使用蓝牙适配器来捕获蓝牙数据,并进行进一步的分析。而adv_ind则是一种蓝牙广播的类型,用于广播蓝牙设备的存在和提供的服务。 如果我们想要分析adv_ind数据,首先需要在Wireshark中设置捕获过滤器来过滤仅含adv_ind的数据。具体的过滤器语法可以是“btcommon.eir_packet_type == 0x00”或“bthci.command == 0x03”。 一旦我们成功捕获到adv_ind数据,我们就可以通过Wireshark的解析功能来查看它们的详细信息。Wireshark会将数据的各个字段以及它们的值显示出来,帮助我们理解和分析这些数据。 在分析adv_ind数据时,我们可以关注以下几个方面: 1. 广播设备地址:这个地址可以帮助我们识别蓝牙设备的唯一标识符。 2. 服务UUID:这个标识符可以告诉我们设备提供的服务类型。 3. RSSI值:这是接收信号强度指示器,可以帮助我们了解设备的信号强度。 4. 广播数据:广播中可能含其他自定义数据,可以根据需求来分析。 通过分析adv_ind数据,我们可以获取对蓝牙设备的一些信息,如设备类型、服务类型、信号强度等。这些信息可以帮助我们了解蓝牙设备的特征和功能,并进一步分析和识别设备的行为和用途。 总的来说,通过使用Wireshark工具来捕获和分析蓝牙adv_ind数据,我们可以获得对蓝牙设备的更深入的了解,从而更好地理解和掌握蓝牙技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值