Verwenden von iOS GameKits "Bluetooth Bonjour" mit anderen Plattformen



0 Answers

Vielleicht ein bisschen verspätet, aber die Technologien haben sich weiterentwickelt, so gibt es sicherlich neue Informationen, die ein neues Licht auf die Sache werfen ...

Das traditionelle GameKit wurde durch Multiper Connectivity ersetzt und die Unterstützung für WiFi Direct auf iOS eingeführt, das Framework bleibt jedoch weiterhin nur iOS. Ich gehe davon aus, dass dort proprietäre Dinge passieren.

Da iOS noch keine direkte API für WiFi Direct eröffnet hat, glaube ich, dass BLE, das von beiden Plattformen unterstützt wird (einige besser als andere), am besten genutzt werden kann.

Auf iOS kann ein Gerät gleichzeitig als BLE Central und BLE Peripheral funktionieren, auf Android ist die Situation komplexer, da nicht alle Geräte den BLE Peripheral State unterstützen. Auch der Android BLE Stack ist sehr instabil (bis heute).

Wenn Ihr Anwendungsfall Feature-orientiert ist, würde ich vorschlagen, Frameworks und Bibliotheken zu betrachten, die eine plattformübergreifende Kommunikation für Sie ermöglichen, ohne dass Sie sie von Grund auf neu erstellen müssen.

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

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

Question

Ich möchte eine Verbindung zu iOS-basierten Geräten über Bluetooth herstellen. Ich kann sehen, dass der Dienst "Lokales Netzwerk" verfügbar ist, aber ich kann keine zusätzlichen Informationen darüber finden. Die unter Schlüssel 0x0204 gespeicherte Eigenschaft sieht wie ein Bonjour-Schlüssel aus.

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

Hier sind SDP-Daten, die mit Bluetooth Explorer unter OS X extrahiert wurden, während das iOS-Gerät Gamelofts Star Battalion betreibt.

    {
        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:

Ich habe mit Apples Bluetooth Explorer unter OS X und sdptool in GNU / Linux herausgefunden, dass der Schlüssel 0x0001 (steht für "protocol class") mit dem Wert 0x1115 für die "PANU" Variante von "PAN" - einem peer2peer - steht Variante. Es ist bemerkenswert, dass OS X keine Unterstützung für dieses Protokoll bietet, obwohl das Erstellen eines 0x1116 Netzwerks unterstützt wird, das die "NAP" -Variante von "PAN" ist - eine Client / Server-Variante.

Das können gute Nachrichten sein, aber nur, wenn das Sitzungsprotokoll von GameKit nicht verwendet werden muss. Eine Hijacking der Media-Layer-Verbindung, die von GameKit eingerichtet wurde, um anderen UDP-Verkehr zu senden, wäre ideal.

Ich muss immer noch 0x1115 , ob diese GameKit Verbindung wirklich 0x1115 ist oder nicht; Das heißt, wenn es wirklich "PANU" ist. Hat jemand weitere Informationen?

Hinweis: Während Bonjour diesen Bluetooth-Dienst nach iOS 3 automatisch angekündigt hat, hat sich das mit iOS 5 geändert. Siehe die Antwort, die ich zum Aufbau einer Bluetooth-Verbindung ohne GameKit geschrieben habe , wobei ich Informationen aus Apples technischem QAA5353 praktisch dokumentiert habe .

Eine kleine Menge Forschung mit GNU / Linux führte nicht zu einer erfolgreichen Verbindung. Vielleicht liegt es an mangelndem Wissen darüber, wie man pand richtig pand . Dies kann auch auf Bluetooth-MAC-basierte Blockierung zurückzuführen sein. Ich würde Informationen lieben, die jemand anbieten kann. Wenn ich dies weiter recherchiere und etwas Interessantes stolpere, 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? Die Aktivierung 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?

Hä!

ivucica@ivucica-MacBook:~$ sudo hcidump
HCI sniffer - Bluetooth packet analyzer ver 2.2
device: hci0 snap_len: 1028 filter: 0xffffffff
 HCI Event: Command Status (0x0f) plen 4
    Create Connection (0x01|0x0005) status 0x00 ncmd 1
> HCI Event: Role Change (0x12) plen 8
    status 0x00 bdaddr ADDRESS_HERE role 0x01
    Role: Slave
> HCI Event: Connect Complete (0x03) plen 11
    status 0x00 handle 12 bdaddr ADDRESS_HERE type ACL encrypt 0x00
 HCI Event: Command Status (0x0f) plen 4
    Read Remote Supported Features (0x01|0x001b) status 0x00 ncmd 1
> HCI Event: Read Remote Supported Features (0x0b) plen 11
    status 0x00 handle 12
    Features: 0xbf 0xfe 0x8f 0xfe 0x9b 0xff 0x79 0x83
 HCI Event: Command Status (0x0f) plen 4
    Read Remote Extended Features (0x01|0x001c) status 0x00 ncmd 1
> HCI Event: Max Slots Change (0x1b) plen 3
    handle 12 slots 5
> HCI Event: Read Remote Extended Features (0x23) plen 13
    status 0x00 handle 12 page 1 max 1
    Features: 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
 HCI Event: Command Status (0x0f) plen 4
    Remote Name Request (0x01|0x0019) status 0x00 ncmd 1
> HCI Event: Remote Name Req Complete (0x07) plen 255
    status 0x00 bdaddr ADDRESS_HERE name 'Evil iPad'
 HCI Event: Command Status (0x0f) plen 4
    Authentication Requested (0x01|0x0011) status 0x00 ncmd 1
> HCI Event: Link Key Request (0x17) plen 6
    bdaddr ADDRESS_HERE
 HCI Event: Command Complete (0x0e) plen 10
    Link Key Request Reply (0x01|0x000b) ncmd 1
    status 0x00 bdaddr ADDRESS_HERE
> HCI Event: Auth Complete (0x06) plen 3
    status 0x00 handle 12
 HCI Event: Command Status (0x0f) plen 4
    Set Connection Encryption (0x01|0x0013) status 0x00 ncmd 1
> HCI Event: Encrypt Change (0x08) plen 4
    status 0x00 handle 12 encrypt 0x01
 HCI Event: Number of Completed Packets (0x13) plen 5
    handle 12 packets 1
> ACL data: handle 12 flags 0x02 dlen 16
    L2CAP(s): Info rsp: type 2 result 0
      Extended feature mask 0x02a8
        Enhanced Retransmission mode
        FCS Option
        Fixed Channels
        Unicast Connectless Data Reception
 HCI Event: Number of Completed Packets (0x13) plen 5
    handle 12 packets 1
> ACL data: handle 12 flags 0x02 dlen 20
    L2CAP(s): Info rsp: type 3 result 0
      Fixed channel list 0x00000006
        L2CAP Signalling Channel
        L2CAP Connless
 HCI Event: Number of Completed Packets (0x13) plen 5
    handle 12 packets 1
> ACL data: handle 12 flags 0x02 dlen 16
    L2CAP(s): Connect rsp: dcid 0x0000 scid 0x0040 result 2 status 0
      Connection refused - PSM not supported
> HCI Event: Disconn Complete (0x05) plen 4
    status 0x00 handle 12 reason 0x13
    Reason: Remote User Terminated Connection

Dies?

> ACL data: handle 12 flags 0x02 dlen 16
    L2CAP(s): Connect rsp: dcid 0x0000 scid 0x0040 result 2 status 0
      Connection refused - PSM not supported



Related