使用 PIN 码或其他安全措施从 iPhone 启动蓝牙配对

使用 PIN 码或其他安全措施从 iPhone 启动蓝牙配对

我有一个 raspberry pi 3 (raspbian jessie),如果我扫描并在 pi 上启动配对,我目前可以将其与我的手机配对bluetoothctl。我有两个主要问题:

  • 该设备未显示在手机上的蓝牙设备列表中
  • 目前配对需要人与 pi 交互

hcitool第一个问题可能与我所宣传的内容有关,我过去一直在设置数据包并处理过 iOS 蓝牙规范。

第二个是我所坚持的。理想情况下,我会在手机上输入静态 PIN 码并进行连接。但是,我听说该方法已经过时,并且bluetooth-agent MY_PIN不起作用(找不到命令)。我不想关闭配对身份验证,因为这意味着我周围的所有随机人都可以连接到它。

我可以使用更好的方法吗?如果没有,我正在寻找有关如何使 PIN 身份验证发挥作用的指导。

答案1

我遇到同样的问题已经有一段时间了(5个月),我偶然发现这一页昨天

前几条评论将向您展示如何在 Pi 上实现蓝牙的 PIN 码。安装后它对我有用(我在更改一些文件以实现 PIN 码之前安装了这个。

基本上程序如下:

/etc/apt/sources.list,取消注释以“deb-src”开头的行之后,执行 asudo apt-get update和 acd /usr/src; sudo apt-get source bluez


在文件中/usr/src/bluez-5.23/test/simple-agent更改此部分: return ask("Enter PIN Code: ")
进入以下内容return "1234",其中 1234 是您要使用的 pin 码。
之后您在中创建以下脚本/usr/bin,我们称之为 btscript.sh :

#!/bin/sh
result=`ps aux | grep -i "simple-agent" | grep -v "grep" | wc -l`
if [ $result -ge 0 ]; then
    sudo hciconfig hci0 piscan
    sudo hciconfig hci0 sspmode 0
    sudo /usr/bin/python /usr/src/bluez-5.23/test/simple-agent &
else
    echo "BT Agent already started" 
fi

通过在文件sudo chmod +x
之前添加此行使该脚本可执行: exit 0/etc/rc.local
/usr/bin/btscript.sh

之后,重新启动您的机器:sudo reboot

您应该能够使用 PIN 码连接到您的 Pi。

虽然,正如前面提到的这里,您将能够使用 iOS 设备看到您的 Pi,但只能看到一次,因此不要让您的设备忘记您的 Pi,否则您将无法再连接到它。

为了解决这个问题,请创建一个脚本,例如bt_iphone.sh,并将该代码放入其中:

#!/bin/sh
sudo hciconfig hci0 sspmode 1 # Activate SSP which is the current standard
# for bluetooth pairing, this will make the RPi discoverable again but
# with a passkey instead of a PIN code
echo -e 'power off\n quit ' | bluetoothctl # Make the RPi undiscoverable
sleep 5
echo -e 'power on\n quit ' | bluetoothctl # Make the RPi discoverable again
sleep 1
sudo hciconfig hci0 sspmode 0 # Deactivate SSP and activate PIN code authentication
exit 0

使其可执行sudo chmod +x bt_iphone.sh并使用 crontab 每分钟执行此脚本:crontab -e并在文件末尾: * * * * * sudo bash /path/to/bt_iphone.sh

这并不优雅,但似乎可行。如果有人对最后一个问题有更好的解决方案,我愿意接受建议。

问题仍然存在(同样仅限于 iDevices),PIN 码存在超时,如果您在 PIN 码屏幕显示后 3 秒内未输入并确认 PIN 码,则无法连接。我还没有找到任何解决方法。

相关内容