程序员知道如何抓取蓝牙广播包很正常吧?

大家对于蓝牙应该都不陌生,现在的手机基本上都有蓝牙功能,而且蓝牙耳机、蓝牙手环等智能设备在市场上也很常见了。

这么多的蓝牙设备都是使用了蓝牙协议的,而蓝牙广播数据包又是蓝牙协议中最经常用到的。

不管是基于低功耗蓝牙的 Beacon 设备,还是从机模式下的蓝牙设备(比如手环、耳机)等待被扫描时候,都需要在 RF 通道上发出广播数据包。

所以想要对于蓝牙协议和蓝牙开发有进一步的理解, 蓝牙广播抓包就是必须要掌握的一个技能。

这里分享下我最近使用到的抓取蓝牙广播包的一些方法,希望对你有所帮助。

1、手机蓝牙调试助手查看蓝牙广播包

在手机的应用商店搜 “蓝牙调试助手”  能搜出来很多相关的APP, 这里介绍两个目前个人使用起来还不错的APP(主要是用起来没有广告)。

这两个APP, 基本功能都差不多,只不过在交互上面有些区别。

这里通过蓝牙调试助手可以扫描到米家的温湿度传感器,连接上之后可以获取到一些设备的信息,比如版本、电量。

对于一些不能连接的广播设备,比如 iBeacon 设备, 使用调试助手也是能查看到广播报文的。

但是对于一些使用非标准蓝牙广播协议,比如 2.4G 遥控器的设备,因为只是广播一段时间,而且每次广播的协议包数据会变化,手机扫描广播信道的时候可以抓不到这些数据包。

这时候就需要借助 USB Dongle  外部设备来抓包了(要是不在意价格直接上 Ellisys 或者 Frontline 也是可以的),下面简单介绍下怎么使用 CC2540 模块 和 nRF52840  模块 来抓取附近广播包以及实际使用中的一些小技巧。

2、CC2540 USB Dongle

硬件购买的话在淘宝上搜一下 CC2540 USB Dongle , 然后挑个顺眼的买就好了,价格一般在30块钱左右。

拿到分析仪后,从TI官网上下载驱动和软件(或者 从百度网盘上下载 链接: https://pan.baidu.com/s/1it20V7_ZAdD75H3t6LHnOA 提取码: rtec), 安装完后就可以愉快地抓包了。

1、打开软件,选择 Bluetooth Low Energy。

2、如果驱动正确安装了, 那么打开软件后就会显示当前的设备。

3、在抓包之前还需要确认下要抓取的广播信道。 

对于使用标准的蓝牙广播协议的设备, 3个广播信道选择哪个都是能抓到包的,但是对于一些非标准的广播设备,可能只会在某一信道上广播,这时候就需要3个信道都抓取一段时间的数据包,再进行确认了。

4、点击抓包图标就可以开始抓取蓝牙广播包了

开始抓包后,一般都是会快速的滚屏,因为显示中我们附近的蓝牙设备实在是太多了。

这时候怎么快速确认哪些广播包才是我们想抓的包呢? 

可以将广播的设备靠近 dongle 硬件,然后在抓包数据中找到信号强度最强的报文,一般就是我们想要的。

关于 dbm 的小知识:

dbm 中文是分贝毫瓦,是一个表示无线功率的绝对值。它的数值是以1mw功率为基准的一个比值。计算公式如下:dbm=10log(p/1mw)

为什么常见的信号强度都是负数的值呢?

因为1mw = 0 dbm, 而随着信号在空间内传播,又受到障碍物的干扰,能量会衰减,所以常见的接收端显示的信号强度都为负值,表示比1mw弱。

由此也可以得知,信号强度这个值越大,表示信号越好。比如-30dbm比-90dbm好。

在软件中还可以通过过滤广播地址来只显示我们关心的报文。

在 Field Name 中选择对应的包类型, 就可以在 Template 中看到示例了,然后再输入框中添加想要过滤的地址, 再点击 Apply filer 即可。


3、nRF52840 USB Dongle

同样地,需要先购买一个 dongle。

可能你会有疑问:既然都有 CC2540 了, 为什么还要介绍 nRF52840 呢?

52840 是支持抓取蓝牙5.0的包,并且向下支持抓取蓝牙4.2的包,而CC2540 只支持4.0。

如果没有需要,那么用CC2540就已经够用了,省下的几十块钱还可以去吃顿好的。

我这里购买的是红旭无线的 nRF52840 Dongle 

参考  https://mp.weixin.qq.com/s/67NdU7cLhPrtr54yCmbezA  官方文章来搭建环境和抓包。

1、安装wireshark 和 python3。

如果电脑之前有安装过低版本的python,建议删除干净后装最新版本的python3, 并且在安装过程中需要勾选配置到环境变量中。

进入目录 

nrf_sniffer_for_bluetooth_le_3.1.0_7cc811f\extcap 执行命令

pip3 install -r requirements.txt  或直接 pip3 install pyserial

2、打开 wireshark ,在 帮助 中找到 关于

3、找到 文件夹 ->  Global Extcap path ,双击蓝色的文件路径,会打开对应的文件目录

4、复制 nrf_sniffer_for_bluetooth_le_3.1.0_7cc811f\extcap  目录下的所有文件到 该目录下。

5、这时候在插件中能看到多了一项 nrf_sniff_ble.bat

6、重启 wireshark 后,可以看到在 接口选择中 多了一个 nRF Sniffer for Bluetooth LE

然后就和抓取网络接口的数据包一样操作了。

在数据包详情中可以看到当前包的信道通道和信号强度,所以根据信道和信号强度来判别数据包和设备的对应关系这个方法也还是有用的。

当然,如果想过滤显示指定mac地址的数据包, 也是有办法的。在显示过滤器中 填入 btle.advertising_address == d3:31:5a:db:35:91 即可。

在官方介绍中,这个 52840 Dongle 还可以抓取蓝牙mesh入网及配置的整个过程,不过目前我还没有亲测这个使用场景。

文章 智能照明新的低成本解决方案?涂鸦 Beacon 智能灯泡初体验 中的 Tuya Beacon 报文也是使用 52840 Dongle 抓取的,目前看在一些日常的使用场合,这个低成本的抓取蓝牙广播包设备还是够用的。

最后,如果你有更加方便的抓包方法,欢迎后台留言分享~



参考资料:

1、CC2540 USB Dongle 驱动

http://www.ti.com/lit/zip/swrc212

2、红旭无线的抓包教程

https://mp.weixin.qq.com/s/67NdU7cLhPrtr54yCmbezA

3、文章中的手机APP和相关驱动整合百度云盘链接

https://pan.baidu.com/s/1it20V7_ZAdD75H3t6LHnOA 

提取码: rtec 

4、The Bluetooth Range Estimator

https://www.bluetooth.com/learn-about-bluetooth/key-attributes/range/#estimator


【推荐阅读】

1、京东云无线宝怎么设置收益高?一个不需要光猫后台超级账号密码的方法

2、两台主机、多台主机怎么共用键鼠?Windows、Mac OS、Linux 多系统怎么共用键鼠?

3、记录一下小米6解BL锁,获取ROOT权限

4、玩玩带ESP32的电子墨水屏模块

你可能感兴趣的:(程序员知道如何抓取蓝牙广播包很正常吧?)