在Mavericks OSX下生成的iBeacons有效但与iOS有一些不同的字节

 骆树真次_902 发布于 2023-02-06 11:56

我在OSX下遵循这个示例项目BeaconEmitter来生成样本iBeacons,用于在iPhone上开发应用程序.BeaconEmitter应用程序基于Matthew Robinson的教程,直到Apple决定在OSX的Core Location上引入iBeacon支持,生成iBeacon的唯一机会是使用IO Bluetooth Framework从头开始构建广告数据包.

但是......那不起作用!

我当然也尝试过iOS上的Apple的AirLocate教程代码,以及可以正常使用的iOS设备之间的代码.但是,如果您尝试使用OSX(BeaconEmitter)生成iBeacon并使用不起作用的iOS设备(AirLocate)接收它.

我有一个基于CC2540 TI芯片的BLE RF嗅探器,以及Windows上的TI嗅探器软件.所以我观察到从AirLocate和BeaconEmitter生成的iBeacons数据包有点不同.

这是使用AirLocate生成的iBeacon: 在此输入图像描述

Thah是使用BeaconEmitter生成的ibeacon: 在此输入图像描述

继这篇文章中的逆向工程师(因为Apple尚未发布iBeacons规范)之后,可以看出Adv PDU Header与两种情况不同.在OSX中,Type = 2且TxAdd = 0,在iOS中Type = 0且TxAdd = 1.

为何如此区别?

以女巫的方式可以强制OSX发送iOS的相同Adv PDU Header?

似乎在AdvData的前5个字节中,两个数据包不等于:

OSX:02 01 06 1A FF

iOS:02 01 1A 1A FF

AdvData有效负载的其余部分与上面链接的逆向工程师帖子一致.

再次,为什么这个字节不同?

我没有找到OSX示例中依赖于哪些代码部分.

更新:它的工作原理

因为BeaconEmitter生成的iBeacon未被AirLocate识别的主要原因是我的错.我不明白AirLocate过滤UUID的一些具体示例,即:E2C56DB5-DFFB-48D2-B060-D0F5A71096E0或5A4BCFCE-174E-4BAC-A814-092E77F6B7E5或74278BDA-B644-4520-8F0C-720EAF059935并非每个UUID值.

因此,BeaconEmitter生成的随机UUID肯定与AirLocate中预先写好的UUID不匹配.

如果您可以从BeaconEmitter"强制"使用具有良好值的UUID,则AirLocate可以识别它:

BeaconEmitter

所以这是iOS AirLocate示例应用程序中的成功测试:

AirLocate

保持上述相同字节的差异......只有嗅探器可以看到:).

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有