BlueZ:从命令行发送LE定向广告

时间:2018-10-25 14:39:26

标签: linux bluetooth-lowenergy bluez

我正在尝试从命令行发送定向广告,但是我不知道该怎么做。我已经检查了 hciconfig hcitool btmgmt bluetoothctl ,但是它们似乎都没有启用定向广告特定的BLE设备。使用hciconfig检查我可以发送的广告类型时,我看到以下内容:-

leadv      [type]   Enable LE advertising
                0 - Connectable undirected advertising (default)
                3 - Non connectable undirected advertising

是否可以通过命令行发送定向广告?

我正在使用在Linux v4.15.0-36-generic上运行的BlueZ ver 5.48,并连接了Bluetooth 4.0加密狗。

1 个答案:

答案 0 :(得分:3)

您至少可以使用原始HCI命令执行此操作,您可以使用hcitool输入。您需要的关键HCI命令是“ LE设置广告参数命令”(ogf = 0x08,ocf = 0x0006)。这是将类型2广告设置为对等地址66:55:44:33:22:11的示例。

sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 02 01 00 11 22 33 44 55 66 07 00

第一个A0 00是最小广告间隔(0x00A0 x 0.625ms = 100ms),第二个是最大广告间隔(您可能实际上希望将它们分开一点)。然后遵循类型(02),自己的地址类型(随机为01),远程地址类型(公共为00),对等地址,通道映射(07表示在通道37、38和39上发布广告)和过滤器策略(00表示允许所有)。可以阅读更多详细信息,例如来自蓝牙规范,版本5.0,第2卷,E部分,第7.8章(可从https://www.bluetooth.com/specifications/bluetooth-core-specification下载)。

请注意,使用此命令时,广告不得处于活动状态,否则将失败。

还请注意,您在问题中提到的某些工具可能会将自己的默认值强加给这些参数,例如将广告间隔更改为更大的值。因此,最安全的方法是使用原始的HCI命令启用广告,这很简单:

sudo hcitool -i hci0 cmd 0x08 0x000a 01

为了完整起见,这是用于使用供应商特定的有效负载启动定向广告的命令集(在这种情况下,Apple显然未经您的许可不应使用)。广告有效负载设置为0x08 0x0008。

sudo hciconfig hci0 up
sudo hcitool -i hci0 cmd 0x08 0x0008 0b 09 ff 4c 00 30 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 02 00 01 11 22 33 44 55 66 07 00
sudo hcitool -i hci0 cmd 0x08 0x000a 01

发出这些命令或任何其他命令时,可以使用btmon(BlueZ附带)监视HCI接口。它很好地解析了数据包,因此您可以轻松地看到编辑原始命令如何改变含义。它还会突出显示它注意到的任何损坏的HCI命令。