RFCOMM ohne pairing mit PyBluez auf Debian?

Ich versuche zum erstellen einer RFCOMM-server-Prozess mit Python verwendet werden kann, ohne die Notwendigkeit für die Paarung. Zunächst packte ich die zwei Beispiel-Skripte, die von der PyBluez Dokumentation:

Server:

# file: rfcomm-server.py

# auth: Albert Huang <[email protected]>
# desc: simple demonstration of a server application that uses RFCOMM sockets
#
# $Id: rfcomm-server.py 518 2007-08-10 07:20:07Z albert $

from bluetooth import *

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

advertise_service( server_sock, "SampleServer",
                   service_id = uuid,
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],
                   profiles = [ SERIAL_PORT_PROFILE ], 
#                   protocols = [ OBEX_UUID ] 
                    )

print "Waiting for connection on RFCOMM channel %d" % port

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

try:
    while True:
        data = client_sock.recv(1024)
        if len(data) == 0: break
        print "received [%s]" % data
except IOError:
    pass

print "disconnected"

client_sock.close()
server_sock.close()
print "all done"

Client:

# file: rfcomm-client.py
# auth: Albert Huang <[email protected]>
# desc: simple demonstration of a client application that uses RFCOMM sockets
#       intended for use with rfcomm-server
#
# $Id: rfcomm-client.py 424 2006-08-24 03:35:54Z albert $

from bluetooth import *
import sys

addr = None

if len(sys.argv) < 2:
    print "no device specified.  Searching all nearby bluetooth devices for"
    print "the SampleServer service"
else:
    addr = sys.argv[1]
    print "Searching for SampleServer on %s" % addr

# search for the SampleServer service
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
service_matches = find_service( uuid = uuid, address = addr )

if len(service_matches) == 0:
    print "couldn't find the SampleServer service =("
    sys.exit(0)

first_match = service_matches[0]
port = first_match["port"]
name = first_match["name"]
host = first_match["host"]

print "connecting to \"%s\" on %s" % (name, host)

# Create the client socket
sock=BluetoothSocket( RFCOMM )
sock.connect((host, port))

print "connected.  type stuff"
while True:
    data = raw_input()
    if len(data) == 0: break
    sock.send(data)

sock.close()

Bei mir lief der server-Skript unter Windows funktioniert alles, wie ich gehofft hatte - kein pairing notwendig war. In dieser Phase war alles ziemlich vielversprechend.

Allerdings muss ich den server-Prozess laufen unter Debian Squeeze. Wenn ich den test auf dem Debian-client die Verbindung abgelehnt wird. In der syslog gibt es Nachrichten aus bluetoothd für einen fehlgeschlagenen link-Schlüssel-Anfrage und die PIN-Anfrage.

Version Informationen:

  • PyBluez 0.18
  • Python 2.6
  • Bluez 4.66
  • Bluetooth v2.0-hardware auf beiden enden der Verbindung

Diese Diskussion zu suggerieren scheint, dass, wenn ich einstellen kann das security-level auf dem server, socket dann Kopplung wird deaktiviert und alles wird nur funktionieren, wie erwartet. Es ist nicht ersichtlich, um mich, wie dies mit PyBluez obwohl, oder sogar, wenn es möglich ist.

Habe ich experimentierte mit Aufrufe von setsockopt() mit verschiedenen BT_SECURITY* Konstanten, sowie der Ergreifung der letzten PyBluez und ruft setl2capsecurity() aber nicht in der Lage irgendwelche Fortschritte zu machen.

Ist das erreichbar mit PyBluez?

InformationsquelleAutor der Frage Tim Connolly | 2013-01-31

Schreibe einen Kommentar