Verwenden von „Bluetooth Bonjour“ von iOS GameKit mit anderen Plattformen

68

Ich bin daran interessiert, über Bluetooth eine Verbindung zu iOS-basierten Geräten herzustellen. Ich kann sehen, dass der Dienst "Lokales Netzwerk" verfügbar ist, kann jedoch keine zusätzlichen Informationen dazu finden. Die unter Schlüssel 0x0204 gespeicherte Eigenschaft sieht aus wie ein Bonjour-Schlüssel.

Welches Protokoll wird verwendet? Wie kann man mit Linux, Mac oder einem eigenen eingebetteten Gerät, das mit einem Bluetooth-Chip ausgestattet ist, mit dem iOS-Gerät kommunizieren?

Hier sind SDP-Daten, die mit Bluetooth Explorer unter OS X extrahiert wurden, während auf dem iOS-Gerät das Star Battalion von Gameloft ausgeführt wird.

    {
        0x0000 = uint32(1330188565),
        0x0200 = uint32(2),
        0x0202 = string(004wD7l1A..0|0|0|ivucic-À'),
        0x030a = uint32(0),
        0x0009 = { { uuid16(11 15), uint16(256) } },
        0x0201 = string(_657o30a6rmst07À),
        0x0005 = { uuid16(10 02) },
        0x0100 = string(Local Network),
        0x0001 = { uuid16(11 15) },
        0x0203 = string(004wd7l1a..0|0|0|ivucic-_657o30a6rmst07À
        0xf000 = uint8(2),
        0x0204 = string(    txtvers=1state=A),
        0x0008 = uint8(255),
        0x0006 = { uint16(25966), uint16(106), uint16(256), uint16(26226), uint16(106), uint16(272), uint16(25701), uint16(106), uint16(288), uint16(27233), uint16(106), uint16(304) },
        0x0004 = { { uuid16(01 00), uint16(15) }, { uuid16(00 0f), uint16(256), { uint16(2048), uint16(2054) } } },
        0x0002 = uint32(0)
    },

Andere teilweise relevante Fragen:


Bei weiteren Recherchen mit Apples Bluetooth Explorer unter OS X und sdptoolGNU / Linux habe ich festgestellt, dass der Schlüssel 0x0001(steht für "Protokollklasse") mit dem Wert von 0x1115für die "PANU" -Variante von "PAN" steht - eine Peer2peer-Variante. Es ist bemerkenswert, dass OS X dieses Protokoll nicht dienstseitig ("Hosting") unterstützt, obwohl die Erstellung eines 0x1116Netzwerks unterstützt wird, bei dem es sich um die "NAP" -Variante von "PAN" handelt - eine Client / Server-Variante.

Dies könnte eine gute Nachricht sein, aber nur, wenn das Sitzungsprotokoll von GameKit nicht verwendet werden muss. Ideal wäre es, die von GameKit hergestellte Medienschichtverbindung zu entführen, um anderen UDP-Verkehr zu senden.

Ich muss noch untersuchen, ob diese GameKit-Verbindung wirklich besteht oder nicht 0x1115. das heißt, wenn es wirklich "PANU" ist. Hat jemand weitere Informationen?


Beachten Sie, dass Bonjour diesen Bluetooth-Dienst nach iOS 3 automatisch angekündigt hat. Dies hat sich jedoch mit iOS 5 geändert. Siehe die Antwort, die ich zum Herstellen einer Bluetooth-Verbindung ohne GameKit veröffentlicht habe , in der ich Informationen aus Apples technischen Fragen und Antworten QA1753 handlich dokumentiert habe .


Eine kleine Recherche mit GNU / Linux führte nicht zu einer erfolgreichen Verbindung. Dies kann auf mangelndes Wissen über die ordnungsgemäße Verwendung zurückzuführen sein pand. Dies kann auch an einer Bluetooth MAC-basierten Blockierung liegen. Ich würde gerne Informationen haben, die jemand anbieten kann. Wenn ich dies weiter recherchiere und auf etwas Interessantes stoße, werde ich diese Antwort aktualisieren.


Ergebnisse unter Ubuntu. Der Dienst wird nur angezeigt, wenn Bluetooth Bonjour aktiv ist.

ivucica@ivucica-MacBook:~$ sdptool browse $ADDR #relevant data only
Browsing ADDRESS_HERE ...
Service Name: Local Network
Service RecHandle: 0x4f491115
Service Class ID List:
  "PAN User" (0x1115)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 15
  "BNEP" (0x000f)
    Version: 0x0100
    SEQ8: 0 6
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
  code_ISO639: 0x6672
  encoding:    0x6a
  base_offset: 0x110
  code_ISO639: 0x6465
  encoding:    0x6a
  base_offset: 0x120
  code_ISO639: 0x6a61
  encoding:    0x6a
  base_offset: 0x130
Profile Descriptor List:
  "PAN User" (0x1115)
    Version: 0x0100

... and so on ...

Hier ist der Versuch, eine Verbindung herzustellen:

ivucica@ivucica-MacBook:~$ pand --connect $ADDR -n
pand[3237]: Bluetooth PAN daemon version 4.98
pand[3237]: Connecting to ADDRESS_HERE
pand[3237]: Connect to ADDRESS_HERE failed. Connection refused(111)

Ist eine Autorisierung erforderlich? Das Aktivieren von Verschlüsselung, Authentifizierung, sicherer Verbindung und das Erzwingen, Master zu werden, scheint keinen Unterschied zu machen ( -AESMOptionen in verschiedenen Kombinationen).

Hat jemand irgendwelche Ideen?


Huh!

ivucica @ ivucica-MacBook: ~ $ sudo hcidump
HCI-Sniffer - Bluetooth-Paketanalysator Version 2.2
Gerät: hci0 snap_len: 1028 Filter: 0xffffffff
 HCI-Ereignis: Befehlsstatus (0x0f) plen 4
    Verbindungsstatus erstellen (0x01 | 0x0005) 0x00 ncmd 1
> HCI-Ereignis: Rollenwechsel (0x12) plen 8
    Status 0x00 bdaddr ADDRESS_HERE Rolle 0x01
    Rolle: Sklave
> HCI-Ereignis: Connect Complete (0x03) plen 11
    Status 0x00 Handle 12 bdaddr ADDRESS_HERE Typ ACL verschlüsseln 0x00
 HCI-Ereignis: Befehlsstatus (0x0f) plen 4
    Status "Remote Supported Features (0x01 | 0x001b)" lesen 0x00 ncmd 1
> HCI-Ereignis: Lesen Sie die Remote Supported Features (0x0b) plen 11
    Status 0x00 Handle 12
    Eigenschaften: 0xbf 0xfe 0x8f 0xfe 0x9b 0xff 0x79 0x83
 HCI-Ereignis: Befehlsstatus (0x0f) plen 4
    Status der erweiterten Remote-Funktionen (0x01 | 0x001c) 0x00 ncmd 1 lesen
> HCI-Ereignis: Max Slots Change (0x1b) plen 3
    12 Steckplätze handhaben 5
> HCI-Ereignis: Lesen Sie Remote Extended Features (0x23) plen 13
    Status 0x00 Griff 12 Seite 1 max 1
    Eigenschaften: 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
 HCI-Ereignis: Befehlsstatus (0x0f) plen 4
    Status der Remote-Namensanforderung (0x01 | 0x0019) 0x00 ncmd 1
> HCI-Ereignis: Remote Name Req Complete (0x07) plen 255
    Status 0x00 bdaddr ADDRESS_HERE Name 'Evil iPad'
 HCI-Ereignis: Befehlsstatus (0x0f) plen 4
    Authentifizierung angefordert (0x01 | 0x0011) Status 0x00 ncmd 1
> HCI-Ereignis: Link Key Request (0x17) plen 6
    bdaddr ADDRESS_HERE
 HCI-Ereignis: Befehl abgeschlossen (0x0e) plen 10
    Antwort auf Link Key Request (0x01 | 0x000b) ncmd 1
    Status 0x00 bdaddr ADDRESS_HERE
> HCI-Ereignis: Auth Complete (0x06) plen 3
    Status 0x00 Handle 12
 HCI-Ereignis: Befehlsstatus (0x0f) plen 4
    Setzen Sie den Status der Verbindungsverschlüsselung (0x01 | 0x0013) auf 0x00 ncmd 1
> HCI-Ereignis: Änderung verschlüsseln (0x08) plen 4
    Status 0x00 Handle 12 verschlüsseln 0x01
 HCI-Ereignis: Anzahl abgeschlossener Pakete (0x13) plen 5
    12 Pakete verarbeiten 1
> ACL-Daten: Behandeln Sie 12 Flags 0x02 dlen 16
    L2CAP (s): Info rsp: Typ 2 Ergebnis 0
      Erweiterte Feature-Maske 0x02a8
        Erweiterter Neuübertragungsmodus
        FCS-Option
        Feste Kanäle
        Unicast Connectless-Datenempfang
 HCI-Ereignis: Anzahl abgeschlossener Pakete (0x13) plen 5
    12 Pakete verarbeiten 1
> ACL-Daten: Behandeln Sie 12 Flags 0x02 dlen 20
    L2CAP (s): Info rsp: Typ 3 Ergebnis 0
      Feste Kanalliste 0x00000006
        L2CAP-Signalisierungskanal
        L2CAP Connless
 HCI-Ereignis: Anzahl abgeschlossener Pakete (0x13) plen 5
    12 Pakete verarbeiten 1
> ACL-Daten: Behandeln Sie 12 Flags 0x02 dlen 16
    L2CAP (s): Connect rsp: dcid 0x0000 scid 0x0040 result 2 status 0
      Verbindung abgelehnt - PSM wird nicht unterstützt
> HCI-Ereignis: Disconn Complete (0x05) plen 4
    Status 0x00 behandeln 12 Grund 0x13
    Grund: Verbindung vom Remotebenutzer beendet

Diese?

> ACL-Daten: Behandeln Sie 12 Flags 0x02 dlen 16
    L2CAP (s): Connect rsp: dcid 0x0000 scid 0x0040 result 2 status 0
      Verbindung abgelehnt - PSM wird nicht unterstützt
Ivan Vučica
quelle
3
Siehe auch die Antwort von mringwal auf die ähnliche Frage. Ist es im Prinzip möglich, dass ein Android-Gerät über Bluetooth / GameKit mit einem iPhone verbunden wird? für einen weiteren Hinweis dazu.
Brad Larson
@BradLarson Das ist ein erstaunlicher Hinweis! Vielen Dank!
Ivan Vučica
Gibt es einen Grund, warum Sie Bonjour speziell verwenden müssen? Ich habe über das Gleiche nachgedacht (in meinem Fall für die Synchronisierung zwischen einem iOS-Gerät und einer C # WPF-App). Ich habe schließlich DropBox verwendet, weil es eine hervorragende API ist, die für viele Plattformen verfügbar ist und es Ihnen ermöglicht, das zu tun, was Sie wollen. Nach allem, was ich gehört habe, funktioniert Bonjour, selbst wenn es "funktioniert", nur in etwa 40% der Fälle.
Echilon
Ich plane, Befehle und keine Dateien auszutauschen. Ich plane, Befehle mit einem eingebetteten Gerät auszutauschen, das keine WLAN-Karte hätte. Ein Bluetooth-Chip ist billiger, viel einfacher, viel einfacher zu beschaffen und verbraucht weniger Strom als eine WLAN-Karte. Ich hatte auch keine Probleme mit dem klassischen LAN / WLAN Bonjour, das als Discovery-Service für mich ständig funktioniert. (Wenn Sie nicht über Bluetooth-Variante sprechen,
nenne
Bluetooth Bonjour ist nicht deshalb interessant, weil es etwas besser macht als klassisches Bonjour oder Bluetooths eigenes SDP, sondern weil es einen PANU-Dienst unter iOS eröffnet und somit die einzige offizielle API ist, die über Bluetooth unter iOS spricht, ohne das teure und komplexe MFI zu beantragen ( problematisch für ein Projekt mit geringem Volumen wie das, das ich in Betracht ziehe).
Ivan Vučica

Antworten:

8

Laut dieser interessanten Website: http://code.google.com/p/btstack/wiki/iPhoneBluetooth Apple verwendet neben seinem Bluetooth-RF-Chip einen speziellen Chip, der jegliche Verbindung für ein Gerät ohne diesen Chip verweigert - dies bedeutet, dass es sich um eine Sperre handelt auf der Hardware-Ebene.

James Roeiter
quelle
2
Es besteht immer die Möglichkeit, dass diese Prüfung aktiviert wird, wenn Bluetooth Bonjour verwendet wird. Beachten Sie jedoch, dass Sie handelsübliche Bluetooth-Tastaturen, -Mäuse und -Headsets kaufen und über ein iPhone, das nicht von Apple stammt, oder ein anderes Gerät über das iPhone angebunden werden können Ich glaube nicht, dass es genügend Beweise gibt, um definitiv zu behaupten, dass es kryptografische Überprüfungen gibt, wenn die PAN-Konnektivität von Bluetooth Bonjour hergestellt wird.
Ivan Vučica
1
Richtig, Sie sind sehr korrekt Ivan - ich bin so, als würden Sie nach Bluetooth-Lösungen suchen - IOS - vs - andere Plattform. Beachten Sie jedoch, dass Bluetooth über Profile verfügt. Apple kann daher sehr einfach definieren, dass eine Verbindung zu Headsets und Tastaturen möglich ist, während eine Verbindung zu einem anderen Gerät nicht möglich ist. Wie ist Ihre Meinung dazu?
James Roeiter
1
Auf jeden Fall möglich, aber ich habe noch nicht alle Optionen untersucht. Ich muss noch mit EIR spielen, was der Schlüssel zum Zulassen von Verbindungen sein kann. Auf jeden Fall macht es Spaß, dass man PAN sehr einfach verwenden kann, indem man ... Trommelwirbel ... das Zielgerät anbindet . Dies kann leider nicht automatisiert werden und erfordert ein Pairing!
Ivan Vučica
1

Vielleicht etwas verspätet, aber die Technologien haben sich seitdem weiterentwickelt, sodass es sicherlich neue Informationen gibt, die neues Licht auf die Sache werfen ...

Das traditionelle GameKit wurde durch Multiper Connectivity ersetzt, zusammen mit der Einführung der Unterstützung für WiFi Direct unter iOS. Das Framework bleibt jedoch weiterhin nur für iOS. Ich gehe davon aus, dass dort proprietäre Dinge vor sich gehen.

Da iOS noch keine direkte API für WiFi Direct geöffnet hat, glaube ich, dass der beste Weg, dies zu erreichen, die Verwendung von BLE ist, das von beiden Plattformen unterstützt wird (einige besser als andere).

Unter iOS kann ein Gerät gleichzeitig als BLE Central und BLE Peripheral fungieren. Unter Android ist die Situation komplexer, da nicht alle Geräte den BLE Peripheral-Status unterstützen. Auch der Android BLE Stack ist (bisher) sehr instabil.

Wenn Ihr Anwendungsfall funktionsgesteuert ist, würde ich empfehlen, sich Frameworks und Bibliotheken anzusehen, die eine plattformübergreifende Kommunikation für Sie ermöglichen, ohne dass Sie sie von Grund auf neu aufbauen müssen.

Zum Beispiel: http://p2pkit.io oder Google in der Nähe

Haftungsausschluss: Ich arbeite für Uepaa und entwickle p2pkit.io für Android und iOS.

p2pkit
quelle