다른 플랫폼과 함께 iOS GameKit의 "Bluetooth Bonjour"사용
Bluetooth를 통해 iOS 기반 장치에 연결하는 데 관심이 있습니다. "로컬 네트워크"서비스가 노출 된 것을 볼 수 있지만 이에 대한 추가 정보를 찾을 수 없습니다. 0x0204 키에 저장된 속성은 Bonjour 키처럼 보입니다.
어떤 프로토콜이 사용됩니까? Linux, Mac 또는 Bluetooth 칩이 장착 된 자체 임베디드 장치를 사용하여 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)
},
부분적으로 관련된 기타 질문 :
- Linux, iOS, Bluetooth, Bonjour, GameKit을 사용한 PAN — 가능합니까? -사람은 Wi-Fi를 사용하여 문제를 해결할 수 있습니다. 임베디드 장치에는 더 비싼 Wi-Fi 칩이 없기 때문에 여기서 해결책이 아닙니다.
- Gamekit없이 Bluetooth를 통한 Bonjour? -베스트 답변은 기술적 세부 사항을 제공하지 않습니다.
- GameKit이없는 iOS 블루투스 -여기에서는 적용 할 수없는 탈옥 장치에 대한 솔루션을 제공합니다.
OS X 및 sdptool
GNU / Linux 에서 Apple의 Bluetooth Explorer를 추가로 조사한 결과, 0x0001
값을 포함 하는 키 ( "프로토콜 클래스"의 0x1115
약자)가 "PAN"의 "PANU"변종 인 peer2peer 변종을 나타냄을 발견했습니다. OS X는 0x1116
클라이언트 / 서버 변형 인 "PAN"의 "NAP"변형 인 네트워크 생성을 지원 함에도 불구하고이 프로토콜에 대한 서비스 측 ( '호스팅') 지원을 제공하지 않습니다 .
이것은 좋은 소식 일 수 있지만 GameKit의 세션 프로토콜을 사용할 필요가없는 경우에만 가능합니다. 다른 UDP 트래픽을 보내기 위해 GameKit에서 설정 한 미디어 계층 연결을 하이재킹하는 것이 이상적입니다.
나는 여전히이 GameKit 연결이 진짜인지 아닌지 조사해야 할 것이다 0x1115
. 즉, 실제로 "PANU"인 경우입니다. 추가 정보가있는 사람이 있습니까?
Bonjour가 iOS 3 이후에이 Bluetooth 서비스를 자동으로 발표했지만 iOS 5에서 변경되었습니다. GameKit없이 Bluetooth 연결을 설정하는 방법 에 대한 답변을 참조하십시오. 여기서 Apple의 기술 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 스니퍼-블루투스 패킷 분석기 버전 2.2 장치 : hci0 snap_len : 1028 필터 : 0xffffffff HCI 이벤트 : 명령 상태 (0x0f) plen 4 연결 생성 (0x01 | 0x0005) 상태 0x00 ncmd 1 > HCI 이벤트 : 역할 변경 (0x12) plen 8 상태 0x00 bdaddr ADDRESS_HERE 역할 0x01 역할 : 노예 > HCI 이벤트 : 연결 완료 (0x03) plen 11 상태 0x00 핸들 12 bdaddr ADDRESS_HERE 유형 ACL 암호화 0x00 HCI 이벤트 : 명령 상태 (0x0f) plen 4 원격 지원 기능 (0x01 | 0x001b) 상태 0x00 ncmd 1 읽기 > HCI 이벤트 : 원격 지원 기능 읽기 (0x0b) plen 11 상태 0x00 핸들 12 특징 : 0xbf 0xfe 0x8f 0xfe 0x9b 0xff 0x79 0x83 HCI 이벤트 : 명령 상태 (0x0f) plen 4 원격 확장 기능 (0x01 | 0x001c) 상태 읽기 0x00 ncmd 1 > HCI 이벤트 : 최대 슬롯 변경 (0x1b) plen 3 12 슬롯 5 핸들 > HCI 이벤트 : 원격 확장 기능 읽기 (0x23) plen 13 상태 0x00 핸들 12 페이지 1 최대 1 특징 : 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 HCI 이벤트 : 명령 상태 (0x0f) plen 4 원격 이름 요청 (0x01 | 0x0019) 상태 0x00 ncmd 1 > HCI 이벤트 : 원격 이름 요청 완료 (0x07) plen 255 상태 0x00 bdaddr ADDRESS_HERE 이름 'Evil iPad' HCI 이벤트 : 명령 상태 (0x0f) plen 4 인증 요청 (0x01 | 0x0011) 상태 0x00 ncmd 1 > HCI 이벤트 : 링크 키 요청 (0x17) plen 6 bdaddr ADDRESS_HERE HCI 이벤트 : 명령 완료 (0x0e) plen 10 링크 키 요청 응답 (0x01 | 0x000b) ncmd 1 상태 0x00 bdaddr ADDRESS_HERE > HCI 이벤트 : 인증 완료 (0x06) plen 3 상태 0x00 핸들 12 HCI 이벤트 : 명령 상태 (0x0f) plen 4 연결 암호화 (0x01 | 0x0013) 상태 설정 0x00 ncmd 1 > HCI 이벤트 : 암호화 변경 (0x08) plen 4 상태 0x00 핸들 12 암호화 0x01 HCI 이벤트 : 완료된 패킷 수 (0x13) plen 5 12 패킷 처리 1 > ACL 데이터 : 12 개 플래그 처리 0x02 dlen 16 L2CAP (s) : 정보 rsp : 유형 2 결과 0 확장 기능 마스크 0x02a8 향상된 재전송 모드 FCS 옵션 고정 채널 Unicast Connectless 데이터 수신 HCI 이벤트 : 완료된 패킷 수 (0x13) plen 5 12 패킷 처리 1 > ACL 데이터 : 12 개 플래그 처리 0x02 dlen 20 L2CAP (s) : 정보 rsp : 유형 3 결과 0 고정 채널 목록 0x00000006 L2CAP 신호 채널 L2CAP Connless HCI 이벤트 : 완료된 패킷 수 (0x13) plen 5 12 패킷 처리 1 > ACL 데이터 : 12 개 플래그 처리 0x02 dlen 16 L2CAP (s) : 연결 rsp : dcid 0x0000 scid 0x0040 결과 2 상태 0 연결이 거부되었습니다. PSM이 지원되지 않습니다. > HCI 이벤트 : Disconn Complete (0x05) plen 4 상태 0x00 핸들 12 이유 0x13 이유 : 원격 사용자가 연결을 종료했습니다.
이?
> ACL 데이터 : 12 개 플래그 처리 0x02 dlen 16 L2CAP (s) : 연결 rsp : dcid 0x0000 scid 0x0040 결과 2 상태 0 연결이 거부되었습니다. PSM이 지원되지 않습니다.
According to this interesting site : http://code.google.com/p/btstack/wiki/iPhoneBluetooth Apple are using a special chip besides their Bluetooth RF chip which denies any connection for a device without that chip - this means its a lock on the hardware level.
Maybe a bit delayed, but technologies have evolved since so there is certainly new info around which draws fresh light on the matter...
The traditional GameKit has been replaced by Multiper Connectivity together with introducing support for WiFi Direct on iOS, however the framework still remains iOS only. I assume there is proprietary stuff going on in there.
Also, as iOS has yet to open up a direct API for WiFi Direct I believe the best way to approach this is to use BLE, which is supported by both platforms (some better than others).
On iOS a device can act both as a BLE Central and BLE Peripheral at the same time, on Android the situation is more complex as not all devices support the BLE Peripheral state. Also the Android BLE stack is very unstable (to date).
If your use case is feature driven, I would suggest to look at Frameworks and Libraries that can achieve cross platform communication for you, without you needing to build it up from scratch.
For example: http://p2pkit.io or google nearby
Disclaimer: I work for Uepaa, developing p2pkit.io for Android and iOS.
'program tip' 카테고리의 다른 글
Castle DynamicProxy-GTR로 사용되는 GTP와 관련된 프록시를 만들 때 실패 (0) | 2020.11.09 |
---|---|
Parcelable 인터페이스의 describeContents () 목적 (0) | 2020.11.09 |
새 업스트림 브랜치에 대한 GitHub 풀 요청 (0) | 2020.11.09 |
오류 '보안 경고 : Rack :: Session :: Cookie'에 제공된 비밀 옵션이 없습니다. (0) | 2020.11.09 |
이것이 "발생해서는 안되는 일"이 AMD Fusion CPU 버그를 충돌시키는 것입니까? (0) | 2020.11.09 |