iBeacons 是苹果iOS 7.0 中新推出的一项"隐藏功能",虽然目前还没有公开全部的API详细资料,但它的潜力不容小视。
iBeacons 想要通过蓝牙4.0一站解决之前手机端遇到的一大批问题,包括认证、支付、室内定位、广告推送等,避免了NFC、二维码等没有广泛原生支持的尴尬局面。有关iBeacons的应用场景,在这里不多说,感兴趣的朋友们可以自行搜索。Apple和PayPal等公司已经开始全面部署iBeacons 抱这条大腿,没错的!
iBeacons 的硬件并不难实现,只是一个广播特定内容的蓝牙基站,已经有很多人通过抓包 分析出了 iBeacons协议的基本内容
引用来自
http://ibeacons.yeelink.net/index.php?title=IBeacon%E5%8D%8F%E8%AE%AE%E5%88%86%E6%9E%90 的资料:
IBeacon协议分析
对于一个UUID是E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, major是0, minjor是0的iBeacon,此时的Tx的信号是-59 RSSI,他的BLE的广播包如下:
d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 52 ab 8d 38 a5
以上协议包拆解内容如下:
d6 be 89 8e # Access address for advertising data (this is always the same fixed value)
40 # Advertising Channel PDU Header byte 0. Contains: (type = 0), (tx add = 1), (rx add = 0)
24 # Advertising Channel PDU Header byte 1. Contains: (length = total bytes of the advertising payload + 6 bytes for the BLE mac address.)
05 a2 17 6e 3d 71 # Bluetooth Mac address (note this is a spoofed address)
02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 # Bluetooth advertisement
52 ab 8d 38 a5 # checksum
协议包中的关键部分就是蓝牙的广播部分,这些被分解为如下:
02 01 1a 1a ff 4c 00 02 15 # Apple's fixed iBeacon advertising prefix
e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon profile uuid
00 00 # major
00 00 # minor
c5 # The 2's complement of the calibrated Tx Power
所以我们很容易就可以实现一个简单的iBeacons基站。
参考资料:
http://developer.radiusnetworks.com/2013/10/01/reverse-engineering-the-ibeacon-profile.html
http://developer.radiusnetworks.com/2013/10/09/how-to-make-an-ibeacon-out-of-a-raspberry-pi.html
http://stackoverflow.com/questions/18906988/what-is-the-ibeacon-bluetooth-profile
http://ibeacons.yeelink.net/index.php?title=IBeacon%E5%8D%8F%E8%AE%AE%E5%88%86%E6%9E%90
http://see.sl088.com/wiki/IBeacons