【问题标题】:Insecure rfcomm connection in PythonPython中不安全的rfcomm连接
【发布时间】:2016-07-20 09:49:04
【问题描述】:

我想在不配对的情况下建立从安卓设备到树莓派的蓝牙连接。 RPi 中使用的语言是 Python。我正在使用来自 android 的 createInsecureRfcommSocketToServiceRecord 进行连接。

但是,只有在两个设备配对时才建立连接。 Python 中有没有 listenUsingInsecureRfcommWithServiceRecord 的等价物?

树莓派代码

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]

uuid = "f3c74f47-1d38-49ed-8bbc-0369b3eb277c"

advertise_service( server_sock, "AquaPiServer",
                   service_id = uuid,
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],
                   profiles = [ SERIAL_PORT_PROFILE ], 
                   )

    client_sock, client_info = server_sock.accept()
    print "Accepted connection from ", client_info

Android 代码

BluetoothDevice device = blueAdapter.getRemoteDevice(RPi_MAC);
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("f3c74f47-1d38-49ed-8bbc-0369b3eb277c"));
blueAdapter.cancelDiscovery();
socket.connect();

【问题讨论】:

  • 我不相信没有配对就可以做到这一点。蓝牙配对过程是授权两个设备进行通信的过程。
  • 我很好奇为什么这是不可能的,因为不安全的 rfcomm 在 android 中工作得非常好。是树莓派的限制吗?

标签: python bluetooth raspberry-pi rfcomm


【解决方案1】:

我无需配对即可连接到 Raspberry Pi。为此,我必须让 RPi 可被发现。然后我使用了在 Marshmallow 上运行的 Nexus 中的 socket.connect()。通过这样做,我能够在 RPi 中获取我的 Nexus 的 MAC 地址。唯一的问题是我每次连接时都会收到一个配对请求,但 MAC 地址是我想要的。

感谢您的投入,大卫!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2013-12-10
    • 2012-01-30
    • 2018-07-08
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多