Использование iOS GameKit "Bluetooth Bonjour" с другими платформами - PullRequest
68 голосов
/ 10 ноября 2011

Я заинтересован в подключении к устройствам на базе iOS через Bluetooth.Я вижу, что сервис «Локальная сеть» открыт, но не могу найти дополнительную информацию об этом.Свойство, хранящееся под ключом 0x0204, выглядит как ключ Bonjour.

Какой протокол используется?Как можно общаться с устройством iOS, используя Linux, Mac или собственное встроенное устройство, оснащенное чипом Bluetooth?

Вот данные SDP, извлеченные с помощью Bluetooth Explorer под OS X, в то время как устройство iOS запускает Star Battalion от 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)
    },

Другие частично актуальные вопросы:


Дальнейшие исследования с помощью Apple Explorer Bluetooth в OS X и sdptool в GNU / Linux я обнаружил, что ключ 0x0001 (обозначающий «класс протокола»), содержащий значение 0x1115, обозначает вариант «PANU» для «PAN» - вариант peer2peer.Примечательно, что OS X не обеспечивает поддержку на стороне службы («хостинг») для этого протокола, несмотря на поддержку создания сети 0x1116, которая является вариантом «NAP» «PAN» - вариант клиент / сервер.

Это может быть хорошей новостью, но только если нет необходимости использовать протокол сессии GameKit.Было бы идеально захватить соединение медиа-уровня, установленное GameKit для отправки другого UDP-трафика.

Мне все еще придется выяснить, действительно ли это соединение GameKit действительно 0x1115;то есть если это действительно "PANU".У кого-нибудь есть какая-либо дополнительная информация?


Обратите внимание: хотя Bonjour автоматически объявил об этой услуге Bluetooth после iOS 3, она изменилась в iOS 5. См. Ответ, который я разместил на , как установить соединение Bluetooth безGameKit , где я вручную задокументировал информацию из технических вопросов и ответов Apple QA1753 .


Небольшое количество исследований с GNU / Linux не привело к успешному соединению.Это может быть связано с отсутствием знаний о том, как правильно использовать pand.Это также может быть связано с блокировкой Bluetooth MAC.Я хотел бы получить информацию, которую может предложить каждый.Если я продолжу исследовать это и наткнусь на что-нибудь интересное, я обновлю этот ответ.


Результаты в Ubuntu.Услуга появляется только при активном Bluetooth Bonjour.

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

Вот попытка подключения:

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)

Требуется ли какая-либо авторизация?Включение шифрования, аутентификации, безопасного соединения и принудительное становление мастером, кажется, не имеет никакого значения (-AESM варианты в различных комбинациях).

У кого-нибудь есть какие-нибудь идеи?


Ха!

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

Это?

> 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

Ответы [ 2 ]

8 голосов
/ 29 июля 2012

По данным этого интересного сайта: http://code.google.com/p/btstack/wiki/iPhoneBluetooth Apple использует специальную микросхему помимо своего радиочастотного чипа Bluetooth, который запрещает любое соединение с устройством без этой микросхемы - это означает, что он блокируется на аппаратном уровне.

1 голос
/ 04 мая 2016

Может быть, немного задерживается, но с тех пор технологии развивались, поэтому, безусловно, появилась новая информация, которая проливает свет на этот вопрос ...

Традиционный GameKit был заменен Multiper Connectivity вместе с введением поддержки WiFi Direct на iOS, однако платформа все еще остается только для iOS. Я предполагаю, что там происходят запатентованные вещи.

Кроме того, поскольку iOS еще не открыла прямой API для WiFi Direct, я считаю, что лучший способ достичь этого - использовать BLE, который поддерживается обеими платформами (некоторые лучше, чем другие).

В iOS устройство может одновременно выполнять функции центрального BLE и периферийного устройства BLE, в Android ситуация более сложная, поскольку не все устройства поддерживают состояние периферийного устройства BLE. Также стек Android BLE очень нестабилен (на сегодняшний день).

Если ваш вариант использования основан на функциях, я бы посоветовал взглянуть на фреймворки и библиотеки, которые могут обеспечить кросс-платформенное взаимодействие для вас, без необходимости создавать его с нуля.

Например: http://p2pkit.io или Google поблизости

Отказ от ответственности: я работаю на Uepaa, разрабатывая p2pkit.io для Android и iOS.

...