iBeacon 仿真 ubuntu 错误

iBeacon emulation ubuntu error

我想将我的计算机用作 iBeacon,但我没有成功 (在 Windows 上的 virtualBox 环境中的 Ubuntu 14.04 运行 8.1)

这是我使用的代码

#!/bin/bash                                                                                           
sudo hciconfig hci0 up
sudo hciconfig hci0 noleadv
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 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 00 00 00 00 00 00 00 00 00 00 00 00 00
sudo hciconfig hci0 leadv

我的 hciconfig 结果

hci0:   Type: BR/EDR  Bus: USB
    BD Address: 00:C2:C6:18:C5:E9  ACL MTU: 310:10  SCO MTU: 64:8
    UP RUNNING PSCAN ISCAN 
    RX bytes:5333127 acl:66 sco:0 events:887454 errors:0
    TX bytes:40617442 acl:64 sco:0 commands:887224 errors:0

我安装了 bluez 版本 5.36 (用 bluetoothd -v 核实)


我已经看到很多 Stack overflow post 但无法弄清楚! 检查 , Here or Here.


我已经买了一个真正的 iBeacon,看看有什么可以帮助我,这是我拥有的:

使用 hcidump -R 我读了这个

< 01 0B 20 07 01 10 00 10 00 00 00 
> 04 0E 04 01 0B 20 00 
< 01 0C 20 02 01 01 
> 04 0E 04 01 0C 20 00 
> 04 3E 2A 02 01 00 01 4F 00 00 02 4D CD 1E 02 01 06 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 BB 
> 04 3E 2A 02 01 04 01 4F 00 00 02 4D CD 1E 02 0A F4 08 16 F0 
  FF 64 00 00 00 00 11 09 4D 69 6E 69 42 65 61 63 6F 6E 5F 30 
  30 30 37 39 BB 
> 04 3E 2A 02 01 00 01 4F 00 00 02 4D CD 1E 02 01 06 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 BB 
> 04 3E 2A 02 01 04 01 4F 00 00 02 4D CD 1E 02 0A F4 08 16 F0 
  FF 64 00 00 00 00 11 09 4D 69 6E 69 42 65 61 63 6F 6E 5F 30 
  30 30 37 39 BB 
< 01 0C 20 02 00 01 
> 04 0E 04 01 0C 20 00

问题是我不明白为什么 paquet 大小和类型如此不同 (可能是其他蓝牙非 Beacon 设备).

我很确定这是 beacon paquet,但这些数据对我来说毫无意义

04 3E 2A 02 01 00 01 4F 00 00 02 4D CD 1E 02 01 06 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 BB 

我试图用它来理解它但失败了(使用如下一些堆栈溢出响应)


首先,为了让 BlueZ 进行通告,您提供的字节序列必须包含有效的 BLE 通告 header,最少为 8 个字节。所以要宣传 "helloworld" 你实际上需要发送:

sudo hcitool -i hci0 cmd 0x08 0x0008 10 02 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 44

前 8 个字节是 header,接下来的 10 个字节是编码为 8 位 ASCII 的字符串 "helloworld"。

前8个字节可以这样分解:

10 # Total length of the advertising packet
02 # Number of bytes that follow in first AD structure
01 # Flags AD type
1A # Flags value 0x1A = 000011010  
   bit 0 (OFF) LE Limited Discoverable Mode
   bit 1 (ON) LE General Discoverable Mode
   bit 2 (OFF) BR/EDR Not Supported
   bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
   bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
0C # Number of bytes that follow in second (and last) AD structure
FF # Manufacturer specific data AD type
18 01 # Company identifier code (0x0118 == Radius Networks)

--------------------

如果你有什么可以帮助我理解 iBeacon paquet 是如何构建的,谢谢

天哪!我发现有人和我有完全一样的问题。

Here.


来自@Richard Wifall 的回复


我看到了与 memoryhole 相同的问题,我必须删除多余的零。在配置广告数据以使其与我的加密狗正常工作之前,我还必须启用广告。

这是对我有用的 sequence/commands:

sudo hciconfig hci0 up
sudo hciconfig hci0 leadv 3
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 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 00

这是我的 Radius 脚本版本最终的样子:

#!/bin/sh
../ibeacon.conf
echo "Launching virtual iBeacon..."
sudo hciconfig $BLUETOOTH_DEVICE up
sudo hciconfig $BLUETOOTH_DEVICE leadv 3
sudo hcitool -i $BLUETOOTH_DEVICE cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 $UUID $MAJOR $MINOR $POWER 00
echo "Complete"

这是在带有 ORICO BTA-402-BK 品牌 BLE 加密狗 (CSR8510 A10) 的 Rasberry Pi 上进行的

(我会把它留作评论,但没有足够的代表)