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:
- PAN mit Linux, iOS, Bluetooth, Bonjour, GameKit - möglich? - Person kann Problem mit Wi-Fi lösen. Keine Lösung hier, da eingebettete Geräte den teureren Wi-Fi-Chip nicht haben werden.
- Bonjour über Bluetooth OHNE Gamekit? - Die beste Antwort liefert keine technischen Details
- iOS Bluetooth ohne GameKit - Bietet eine Lösung für ein Gerät mit Jailbreak, die hier nicht anwendbar ist.
Bei weiteren Recherchen mit Apples Bluetooth Explorer unter OS X und sdptool
GNU / Linux habe ich festgestellt, dass der Schlüssel 0x0001
(steht für "Protokollklasse") mit dem Wert von 0x1115
fü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 0x1116
Netzwerks 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 ( -AESM
Optionen 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
Antworten:
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.
quelle
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.
quelle