program tip

다른 플랫폼과 함께 iOS GameKit의 "Bluetooth Bonjour"사용

radiobox 2020. 11. 9. 08:00
반응형

다른 플랫폼과 함께 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)
    },

부분적으로 관련된 기타 질문 :


OS X 및 sdptoolGNU / 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.

참고URL : https://stackoverflow.com/questions/8070998/using-ios-gamekits-bluetooth-bonjour-with-other-platforms

반응형