使用iOS GameKit的"Bluetooth Bonjour"与其他平台

Iva*_*ica 68 networking bonjour bluetooth gamekit ios

我有兴趣通过蓝牙连接到基于iOS的设备.我可以看到"本地网络"服务已公开,但我找不到任何有关它的额外信息.存储在密钥0x0204下的属性看起来像Bonjour密钥.

使用哪种协议?如何使用Linux,Mac或配备蓝牙芯片的自带嵌入式设备与iOS设备通信?

这是在OS X下使用蓝牙资源管理器提取的SDP数据,而iOS设备运行Gameloft的Star Battalion.

    {
        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)
    },
Run Code Online (Sandbox Code Playgroud)

其他部分相关问题:


在OS X和sdptoolGNU/Linux中使用Apple的蓝牙资源管理器进一步研究,我发现0x0001包含值的键(代表"协议类")0x1115代表"PAN"的"PANU"变体 - peer2peer变体.值得注意的是,OS X不支持该协议的服务端("托管")支持,尽管支持创建0x1116网络,这是"PAN"的"NAP"变体 - 客户端/服务器变体.

这可能是个好消息,但前提是不必使用GameKit的会话协议.劫持GameKit建立的媒体层连接以发送其他UDP流量将是理想的.

我还是要研究这个GameKit连接是否确实存在0x1115; 也就是说,如果它真的是"PANU".有没有人有任何进一步的信息?


请注意,虽然Bonjour在iOS 3之后自动宣布了此蓝牙服务,但iOS 5已经改变了.请参阅我发布的关于如何在没有GameKit的情况下建立蓝牙连接的答案,我在那里轻松记录了Apple 技术问答QA1753中的信息.


使用GNU/Linux进行少量研究并未导致成功连接.这可能是由于缺乏如何正确使用的知识pand.这也可能是由于基于蓝牙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 ...
Run Code Online (Sandbox Code Playgroud)

这是尝试连接:

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)
Run Code Online (Sandbox Code Playgroud)

是否需要某种授权?启用加密,身份验证,安全连接和强制成为主服务器似乎没有任何区别(-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

Jam*_*ter 8

根据这个有趣的网站:http: //code.google.com/p/btstack/wiki/iPhoneBluetooth苹果正在使用一个特殊的芯片,除了他们的蓝牙RF芯片,否认没有该芯片的设备的任何连接 - 这意味着它的锁定在硬件方面.

  • 使用蓝牙Bonjour时,他们总是有可能激活此检查,但考虑到您可以购买现成的蓝牙键盘,鼠标,耳机,并且您可以使用非Apple品牌的计算机或其他设备通过iPhone进行网络共享,我认为没有足够的证据证明在建立蓝牙Bonjour的PAN连接时存在密码检查这一事实. (2认同)