在其他平台上使用iOS GameKit的“ Bluetooth Bonjour”


68

我对通过蓝牙连接到基于iOS的设备感兴趣。我可以看到“本地网络”服务已公开,但是我找不到有关它的任何其他信息。存储在键0x0204下的属性看起来像Bonjour键。

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

这是在iOS设备运行Gameloft的Star Battalion时使用OS X下的Bluetooth Explorer提取的SDP数据。

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

其他部分相关的问题:


通过在OS X和sdptoolGNU / Linux中使用Apple的Bluetooth Explorer进行进一步的研究,我发现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下的结果。仅当蓝牙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嗅探器-蓝牙数据包分析器版本2.2
设备:hci0 snap_len:1028过滤器:0xffffffff
 HCI事件:命令状态(0x0f)全体4
    创建连接(0x01 | 0x0005)状态0x00 ncmd 1
> HCI事件:角色更改(0x12)全体会议8
    状态0x00 bdaddr ADDRESS_HERE角色0x01
    角色:奴隶
> HCI事件:连接完成(0x03)全体会议11
    状态0x00句柄12 bdaddr ADDRESS_HERE类型ACL加密0x00
 HCI事件:命令状态(0x0f)全体4
    读取远程支持的功能(0x01 | 0x001b)状态0x00 ncmd 1
> HCI事件:读取远程支持的功能(0x0b)全体11
    状态0x00句柄12
    功能:0xbf 0xfe 0x8f 0xfe 0x9b 0xff 0x79 0x83
 HCI事件:命令状态(0x0f)全体4
    读取远程扩展功能(0x01 | 0x001c)状态0x00 ncmd 1
> HCI事件:最大插槽更改(0x1b)全体3
    处理12个插槽5
> HCI事件:读取远程扩展功能(0x23)全体13
    状态0x00手柄12页1最大值1
    功能:0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
 HCI事件:命令状态(0x0f)全体4
    远程名称请求(0x01 | 0x0019)状态0x00 ncmd 1
> HCI事件:远程名称要求完成(0x07)255
    状态0x00 bdaddr ADDRESS_HERE名称'Evil iPad'
 HCI事件:命令状态(0x0f)全体4
    请求的身份验证(0x01 | 0x0011)状态0x00 ncmd 1
> HCI事件:链接密钥请求(0x17)全体6
    bdaddr ADDRESS_HERE
 HCI事件:命令完成(0x0e)全体10
    链接密钥请求回复(0x01 | 0x000b)ncmd 1
    状态0x00 bdaddr ADDRESS_HERE
> HCI事件:身份验证完成(0x06)全体会议3
    状态0x00句柄12
 HCI事件:命令状态(0x0f)全体4
    设置连接加密(0x01 | 0x0013)状态0x00 ncmd 1
> HCI事件:加密更改(0x08)全体会议4
    状态0x00句柄12加密0x01
 HCI事件:已完成的数据包数(0x13)全体5
    处理12个数据包1
> ACL数据:处理12个标志0x02 dlen 16
    L2CAP:信息rsp:类型2结果0
      扩展功能遮罩0x02a8
        增强的重传模式
        FCS选件
        固定频道
        单播无连接数据接收
 HCI事件:已完成的数据包数(0x13)全体5
    处理12个数据包1
> ACL数据:处理12个标志0x02 dlen 20
    L2CAP:信息rsp:类型3结果0
      固定频道列表0x00000006
        L2CAP信令通道
        L2CAP连续
 HCI事件:已完成的数据包数(0x13)全体5
    处理12个数据包1
> ACL数据:处理12个标志0x02 dlen 16
    L2CAP:连接rsp:dcid 0x0000 scid 0x0040结果2状态0
      连接被拒绝-不支持PSM
> HCI事件:Disconn完成(0x05)全体会议4
    状态0x00处理12原因0x13
    原因:远程用户终止的连接

这个?

> ACL数据:处理12个标志0x02 dlen 16
    L2CAP:连接rsp:dcid 0x0000 scid 0x0040结果2状态0
      连接被拒绝-不支持PSM

3
另请参见mringwal对类似问题的回答原则上,Android设备是否可以通过Bluetooth / GameKit与iPhone接口?有关此的另一个提示。
布拉德·拉尔森

@BradLarson这是一个了不起的提示!谢谢!
伊凡·武西卡(IvanVučica)2011年

您特别需要使用Bonjour的原因吗?我在考虑同一件事(就我而言,是为了在iOS设备和C#WPF应用之间进行同步)。我最终使用了DropBox,因为它具有出色的API,可用于许多平台,并允许您执行所需的操作。据我所知,即使Bonjour“工作”,也只能在40%的时间内工作。
Echilon 2012年

我打算交换命令而不是文件。我打算与没有WLAN卡的嵌入式设备交换命令。蓝牙芯片比WLAN卡更便宜,更简单,更容易获得且耗电量更少。对于经典的LAN / WLAN Bonjour,我也没有零问题,作为发现服务,它对我一直都有效。(除非您谈论的是蓝牙变体,否则我将其称为FUD;)
IvanVučica2012年

蓝牙Bonjour有趣之处不是因为它的功能不如经典Bonjour或蓝牙本身的SDP好,而是因为它在iOS上打开了PANU服务,因此是唯一无需通过昂贵且复杂的MFI即可通过iOS在蓝牙上通话的官方API对于像我正在考虑的那样的小批量项目来说很麻烦)。
伊万·武恰卡(IvanVučica)2012年

Answers:


8

根据这个有趣的网站:http : //code.google.com/p/btstack/wiki/iPhoneBluetooth苹果正在使用一种特殊的芯片,除了其蓝牙RF芯片之外,该芯片拒绝与没有该芯片的设备的任何连接-这意味着它已被锁定在硬件级别上。


2
他们总是有可能在使用Bluetooth Bonjour时激活此检查,但是考虑到您可以购买现成的Bluetooth键盘,鼠标,耳机,并且可以使用非Apple品牌的计算机或其他设备通过iPhone进行网络共享,我认为没有足够的证据可以肯定地证明建立Bluetooth Bonjour的PAN连接时存在加密检查。
伊万·武西卡(IvanVučica)2012年

1
是的,您是非常正确的Ivan-我就像您正在研究蓝牙解决方案-IOS-与其他平台。但是,请记住,蓝牙具有配置文件-因此Apple可以很容易地定义与耳机和键盘的连接是可能的,而与其他设备的连接则不可能。您对此有何看法?
詹姆斯·罗伊特

1
绝对有可能,但我尚未探讨所有选择。我尚未使用EIR,这可能是允许连接的关键。无论如何,有趣的是,可以通过...击鼓...捆绑目标设备来轻松使用PAN 。不幸的是,这不能自动进行,需要配对!
伊万·武恰卡(IvanVučica)2012年

1

也许有一点延迟,但是自那以后技术不断发展,因此肯定有新的信息为人们提供了新的信息。

传统的GameKit已被Multiper Connectivity取代,并引入了对iOS上WiFi Direct的支持,但是该框架仍然仅适用于iOS。我认为其中存在专有的东西。

另外,由于iOS尚未开放WiFi Direct的直接API,我相信解决此问题的最佳方法是使用BLE,这两个平台都支持BLE(某些平台优于其他平台)。

在iOS上,设备可以同时充当BLE Central和BLE Peripheral,在Android上,情况并非如此,因为并非所有设备都支持BLE Peripheral状态。而且,Android BLE堆栈非常不稳定(迄今为止)。

如果您的用例是功能驱动的,我建议您看一下可以为您实现跨平台通信的框架和库,而无需您从头开始进行构建。

例如:http : //p2pkit.io或附近的Google

免责声明:我为Uepaa工作,为Android和iOS开发p2pkit.io。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.