linux – 使用BlueZ堆栈作为外设时错误的有效负载
我尝试按照davidgyoung在 this question中提供的步骤进行操作.以下是我使用的命令: hciconfig hci0 up hciconfig hci0 noleadv hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44 hciconfig hci0 leadv 这给了我这个输出: LE set advertise enable on hci0 returned status 12 < HCI Command: ogf 0x08,ocf 0x0008,plen 10 48 45 4C 4C 4F 57 4F 52 4C 44 > HCI Event: 0x0e plen 4 01 08 20 12 请注意,我不能使用建议命令hciconfig hci0 leadv 0,因为它会抛出错误警告:未知命令 – “0”. 但是,当我尝试从另一台设备读出(例如使用hcidump –raw)广告包中的有效负载时,我得到的输出如下: hcitool lescan – 复制输出片段(两个条目一遍又一遍地重复,看看MAC应该是同一个设备): 00:1A:7D:DA:71:14 mint17-0 00:1A:7D:DA:71:14 (unknown) 匹配hcidump –raw输出片段: > 04 3E 16 02 01 04 00 14 71 DA 7D 1A 00 0A 09 09 6D 69 6E 74 31 37 2D 30 BE > 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08 AD 我正在使用Bluez 5.26和CSR4.0加密狗. hci0: Type: BR/EDR Bus: USB BD Address: 00:1A:7D:DA:71:14 ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:1242 acl:0 sco:0 events:77 errors:0 TX bytes:2079 acl:0 sco:0 commands:77 errors:0 这是’扫描仪’的hciconfig输出: hci0: Type: BR/EDR Bus: USB BD Address: 00:1A:7D:DA:71:13 ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:11753 acl:0 sco:0 events:552 errors:0 TX bytes:1842 acl:0 sco:0 commands:75 errors:0 我错过了什么让它工作? 更新: hcitool -i hci0 cmd 0x08 0x0008 10 02 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 44 得到这个输出 < HCI Command: ogf 0x08,plen 18 10 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C 44 > HCI Event: 0x0e plen 4 01 08 20 12 但仍然是胡言乱语的有效载荷(hcidump的有效载荷部分–raw输出) af:08:0a:02:02:01:02 b7:08:0a:02:02:01:02 be:08:0a:02:02:01:02 ... 更新2: < HCI Command: ogf 0x08,plen 42 10 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > HCI Event: 0x0e plen 4 01 08 20 12 这里是hcidump –raw输出 > 04 3E 16 02 01 04 00 14 71 DA 7D 1A 00 0A 09 09 6D 69 6E 74 31 37 2D 30 BF > 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08 AC > 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08 BF > 04 3E 16 02 01 04 00 14 71 DA 7D 1A 00 0A 09 09 6D 69 6E 74 31 37 2D 30 BF > 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08 AD 所以仍然没有快乐. 更新3: 这是hcidump –raw输出的片段 > 04 3E 0C 02 01 04 00 14 71 DA 7D 1A 00 00 D7 > 04 3E 22 02 01 00 00 14 71 DA 7D 1A 00 16 02 01 0A 02 0A 08 0F 09 72 73 73 6D 74 2D 63 6C 69 65 6E 74 2D 30 D4 > 04 3E 0C 02 01 04 00 14 71 DA 7D 1A 00 00 D4 > 04 3E 22 02 01 00 00 14 71 DA 7D 1A 00 16 02 01 0A 02 0A 08 0F 09 72 73 73 6D 74 2D 63 6C 69 65 6E 74 2D 30 D2 主机名已更改(到目前为止在第三台机器上测试),因此输出有点不同但我仍然没有看到’hello world’. 在这一点上,任何想法都非常受欢迎! 更新4: 使用此广告配置时: hcitool -i hci0 cmd 0x08 0x0008 10 02 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 44 我得到这个hcidump –raw输出: > 04 3E 1C 02 01 00 00 BA D0 63 70 F3 5C 10 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C B5 如您所见,有效负载几乎已完成,但缺少最后一个char.通过将length属性更改为11,我获得了完整的有效负载: hcitool -i hci0 cmd 0x08 0x0008 11 02 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 44 ---- > 04 3E 1D 02 01 00 00 BA D0 63 70 F3 5C 11 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C 44 AB 因此对于未来(和不同的有效载荷):所需的长度似乎是有效载荷的字节(没有长度属性) – 在这种情况下为17. 重要提示:对我来说它不适用于bluez 5.26,我现在正在使用bluez 5.21. 解决方法两个问题:首先,为了让BlueZ进行通告,您提供的字节序列必须包含有效的BLE通告标头,该标头最少为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个字节是标题,接下来的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) 请注意,此标头包含两个不同的长度字段,如果更改“helloworld”有效负载的长度,则必须调整这些字段.此外,出于实验目的,欢迎您使用任意两个字节作为您想要的公司标识符. 其次,您无法使用hcitool lescan命令查看检测到的广告的原始字节.要查看原始字节,必须将此命令与hcidump命令结合使用.有关详细信息,请参见此处:https://stackoverflow.com/a/21790504/1461050 (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |