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

5

我想从命令行发送定向广告,但是我不知道该怎么做。我已经检查了hciconfighcitoolbtmgmtbluetoothctl,但似乎没有一种方法可以将广告定向到特定的BLE设备。当使用hciconfig检查我可以发送的广告类型时,我看到以下内容:-

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

有没有办法从命令行发送定向广告?

我正在使用BlueZ版本5.48,在附有蓝牙4.0 dongle的Linux v4.15.0-36-generic上运行。


这个回答中的信息有帮助吗?从外观上看,您将不得不使用hcitool并自己构建广告消息,但应该是可能的。 - Michael Powers
该链接展示了如何使用无向可连接广告(类型0)和无向不可连接广告(类型3)。我已经可以使用hciconfig、btmgmt或bluetoothctl命令实现这一点。我正在寻找一种允许我发送有向可连接广告(类型1)或有向不可连接广告(类型2)的方法。 - Youssif Saeed
1个回答

5

您至少可以通过原始HCI命令完成此操作,可以使用hcitool输入这些命令。您需要的关键HCI命令是“LE Set Advertising Parameters Command”(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 表示允许全部)。更多详细信息可从 Bluetooth Specification, Version 5.0, Vol 2, Part E, Chapt 7.8 中阅读(可从 https://www.bluetooth.com/specifications/bluetooth-core-specification 下载)。

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

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

sudo hcitool -i hci0 cmd 0x08 0x000a 01

为了完整起见,以下是指定厂商特定负载开始有向广告的一组命令(在本例中为苹果公司,未经允许请勿使用)。广告负载设置为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命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接