You*_*eed 5 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
Run Code Online (Sandbox Code Playgroud)
有没有办法从命令行发送定向广告?
我使用的是在 Linux v4.15.0-36-generic 上运行的 BlueZ 版本 5.48,并连接了蓝牙 4.0 适配器。
小智 5
您至少可以使用原始 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
Run Code Online (Sandbox Code Playgroud)
第一个 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-specation下载)。
注意使用该命令时广告一定不能处于活动状态,否则会失败。
另请注意,您在问题中提到的一些工具可能会将自己的默认值强加给这些参数,例如将广告间隔更改为更大的值。因此,使用原始 HCI 命令启用广告也是最安全的,该命令很简单:
sudo hcitool -i hci0 cmd 0x08 0x000a 01
Run Code Online (Sandbox Code Playgroud)
为了完整起见,下面是一组使用供应商特定负载启动定向广告的命令(在本例中为 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
Run Code Online (Sandbox Code Playgroud)
您可以在发出这些命令或任何其他命令时使用 btmon(BlueZ 附带)监控 HCI 接口。它可以很好地解析数据包,因此您可以轻松地看到编辑原始命令如何改变含义。它还会突出显示它注意到的任何损坏的 HCI 命令。
| 归档时间: |
|
| 查看次数: |
2856 次 |
| 最近记录: |