我有兴趣通过蓝牙连接到基于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)
},
其他部分相关的问题:
使用Apple的OS X中的蓝牙资源管理器和GNU / Linux中的sdptool
进一步研究,我发现密钥0x0001
(代表“协议类”),包含0x1115
的值,代表“PAN”的“PANU”变体 - peer2peer变体。值得注意的是OS X不支持此协议的服务端(“托管”),尽管支持创建0x1116
网络,这是“PAN”的“NAP”变体 - 客户端/服务器变体。
这可能是个好消息,但前提是不必使用GameKit的会话协议。劫持GameKit建立的媒体层连接以发送其他UDP流量将是理想的。
我仍然需要研究这个GameKit连接是否真的是0x1115
;也就是说,如果它真的是“PANU”。有没有人有任何进一步的信息?
请注意,虽然Bonjour在iOS 3之后自动宣布了此蓝牙服务,但iOS 5已经改变了。请参阅我在how to establish Bluetooth connection without GameKit上发布的答案,其中我轻松地记录了来自Apple Technical Q&A 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 ...
以下是尝试连接:
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
答案 0 :(得分:8)
根据这个有趣的网站: http://code.google.com/p/btstack/wiki/iPhoneBluetooth Apple正在使用除蓝牙RF芯片之外的特殊芯片,该芯片拒绝为没有该芯片的设备提供任何连接 - 这意味着它可以锁定硬件级别。
答案 1 :(得分:1)
也许有点延迟,但技术已经发展,因此肯定有新的信息可以解释这个问题...
传统的GameKit已经被Multiper Connectivity取代,同时在iOS上引入了对WiFi Direct的支持,但该框架仍然只是iOS。我假设那里有专有的东西。
此外,由于iOS还没有打开WiFi Direct的直接API,我认为最好的解决方法是使用BLE,这两种平台都支持BLE(有些比其他平台更好)。
在iOS上,设备可以同时充当BLE中心和BLE外设,在Android上情况更复杂,因为并非所有设备都支持BLE外设状态。此外,Android BLE堆栈非常不稳定(迄今为止)。
如果您的用例是功能驱动的,我建议您查看可以为您实现跨平台通信的框架和库,而无需您从头开始构建。
例如:http://p2pkit.io或谷歌附近
免责声明:我为Uepaa工作,为Android和iOS开发p2pkit.io。