| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 程序员知道如何抓取蓝牙广播包很正常吧? -> 正文阅读 |
|
[Python知识库]程序员知道如何抓取蓝牙广播包很正常吧? |
大家对于蓝牙应该都不陌生,现在的手机基本上都有蓝牙功能,而且蓝牙耳机、蓝牙手环等智能设备在市场上也很常见了。 这么多的蓝牙设备都是使用了蓝牙协议的,而蓝牙广播数据包又是蓝牙协议中最经常用到的。 不管是基于低功耗蓝牙的 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 的小知识:
为什么常见的信号强度都是负数的值呢? 因为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、京东云无线宝怎么设置收益高?一个不需要光猫后台超级账号密码的方法 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 1:00:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |