ios networking bluetooth gamekit bonjour

Usando "Bluetooth Bonjour" de iOS GameKit con otras plataformas



networking (2)

Estoy interesado en conectarme a dispositivos basados ​​en iOS a través de Bluetooth. Puedo ver que el servicio "Red local" está expuesto, pero no puedo encontrar información adicional al respecto. La propiedad almacenada con la clave 0x0204 parece una clave Bonjour.

¿Qué protocolo se usa? ¿Cómo se puede hablar con el dispositivo iOS usando Linux, Mac o un dispositivo incorporado equipado con un chip Bluetooth?

Aquí están los datos SDP extraídos usando Bluetooth Explorer bajo OS X mientras el dispositivo iOS ejecuta el Star Battalion de Gameloft.

{ 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) },

Otras preguntas parcialmente relevantes:

Investigando aún más con Bluetooth Explorer de Apple en OS X y sdptool en GNU / Linux, descubrí que la clave 0x0001 (que significa "clase de protocolo"), que contiene el valor de 0x1115 , significa la variante "PANU" de "PAN" - un peer2peer variante. Es notable que OS X no proporciona soporte para el lado del servicio (''hosting'') para este protocolo, a pesar de la creación compatible de una red 0x1116 , que es la variante "NAP" de "PAN" - una variante cliente / servidor.

Esta podría ser una buena noticia, pero solo si el protocolo de sesión de GameKit no tiene que ser utilizado. Sería ideal secuestrar la conexión de capa de medios establecida por GameKit para enviar otro tráfico UDP.

Todavía tendré que investigar si esta conexión de GameKit realmente es 0x1115 ; es decir, si realmente es "PANU". ¿Alguien tiene más información?

Tenga en cuenta que, aunque Bonjour anunció automáticamente este servicio Bluetooth después de iOS 3, esto cambió con iOS 5. Consulte la respuesta que publiqué sobre cómo establecer una conexión Bluetooth sin GameKit , donde documenté fácilmente la información de Q & A Q QA1753 de Apple .

Una pequeña cantidad de investigación con GNU / Linux no resultó en una conexión exitosa. Puede ser debido a la falta de conocimiento sobre cómo usar adecuadamente pand . También puede deberse al bloqueo basado en MAC Bluetooth. Me encantaría la información que cualquiera pueda tener para ofrecer. Si investigo más esto y tropiezo con algo interesante, actualizaré esta respuesta.

Resultados en Ubuntu. El servicio aparece solo cuando Bluetooth Bonjour está activo.

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 ...

Aquí está el intento de conectarse:

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)

¿Se requiere algún tipo de autorización? Habilitar el cifrado, la autenticación, la conexión segura y forzar el convertirse en maestro no parece marcar la diferencia (opciones -AESM en varias combinaciones).

Alguien tiene alguna idea?

Huh!

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

¿Esta?

> 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


De acuerdo con este interesante sitio: http://code.google.com/p/btstack/wiki/iPhoneBluetooth Apple está usando un chip especial además de su chip de RF Bluetooth que niega cualquier conexión para un dispositivo sin ese chip - esto significa que es un bloqueo en el nivel de hardware.


Tal vez un poco retrasado, pero las tecnologías han evolucionado desde entonces, por lo que sin duda hay nueva información que arroja nueva luz sobre el asunto ...

El tradicional GameKit ha sido reemplazado por Multiper Connectivity junto con la introducción de WiFi Direct en iOS, sin embargo, el marco aún permanece solo en iOS. Supongo que hay cosas de propiedad pasando allí.

Además, como iOS aún no ha abierto una API directa para WiFi Direct, creo que la mejor manera de abordar esto es usar BLE, que es compatible con ambas plataformas (algunas mejores que otras).

En iOS, un dispositivo puede actuar como BLE Central y BLE Peripheral al mismo tiempo, en Android la situación es más compleja ya que no todos los dispositivos admiten el estado BLE Peripheral. Además, la pila de Android BLE es muy inestable (hasta la fecha).

Si su caso de uso se basa en funciones, le sugiero que consulte Frameworks y Bibliotecas que pueden lograr la comunicación multiplataforma para usted, sin que tenga que construirlo desde cero.

Por ejemplo: http://p2pkit.io o google cerca

Descargo de responsabilidad: trabajo para Uepaa, desarrollando p2pkit.io para Android e iOS.