您至少可以通过原始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命令。
hcitool
并自己构建广告消息,但应该是可能的。 - Michael Powers