我对通过蓝牙连接到基于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)
},
其他部分相关的问题:
- PAN与Linux,iOS,蓝牙,Bonjour,GameKit —可能吗?-人们可以使用Wi-Fi解决问题。这里不是解决方案,因为嵌入式设备将无法拥有更昂贵的Wi-Fi芯片。
- 在没有游戏套件的情况下通过蓝牙玩转Bonjour?-最佳答案最终不会提供技术细节
- 不带GameKit的iOS蓝牙-为越狱设备提供解决方案,此处不适用。
通过在OS X和sdptool
GNU / 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