: 특정 장비 연결시 서비스 && 특성 읽는부분에 대한 패킷을 분석해 봤습니다.
▶ 호스트에서 Read By Group Type Request (0x10) 를 이용해 Primary Service(0x2800) 를 요청합니다.
: Read By Group Request 포맷은 <기타> 항목에 있습니다.
▶ Read By Group Type Response(0x11) 응답이 호스트로 들어옵니다.
: 위에서 핸들을 ( 0x0001 ~ 0xffff) 로 주었으므로 0x1 부터 응답을 합니다.
: 마지막 Group End Handle 에 0x001a 가 들어 왔네요.
Attribute Data 포맷은 <기타> 항목을 참고하세요.
▶ 호스트에서 Read By Group Type Request (0x10)를 다시 호출합니다.
: starting handle 에는 위에서 나온 Group End Handle 의 다음 값을 넣어줍니다.
▶ Read By Group Type Response(0x11) 이 다시 들어오고
: unKnown UUID (0xffb0)가 들어오고 Group End Handle에 (0x0039) 가 들어 왔네요.
▶ 호스트에서 Read By Group Type Request (0x10)를 다시 호출합니다.
: starting handle ==> 0x003a
▶ Read By Group Type Response(0x11) 이 들어 옵니다.
: Length :20 이므로 ==> handle(2) + Group End handle (2) + UUID(16)
▶ 호스트에서 Read By Group Type Request (0x10)를 다시 호출합니다.
: starting handle ==> 0x0045
▶ Read By Group Type Response(0x11) 응답
: Group End Handle(0xffff) 이므로 마지막입니다.
▶ 호스트에서 Read By Type Request (0x08)를 요청
: 핸들 범위가 (0x01 ~ 0x0b) 로 되어 있고 , UUID (0x2803) .
Generic Access Profile 안의 특성(characteristic) 읽기
▶ Read By Type Response (0x09) 가 들어옵니다.
: Attribute Data 포맷은 <기타> 항목 참조
마지막 Characteristic Value Handle(0x0007) 이므로 뒤에 데이타가 더 있음.
▶ Read By Type Request (0x98) 요청
: Starting Handle 에 0x0007 넣기
▶ Read By Type Response (0x09) 가 들어옴.
: 마지막 Characteristic Value Handle 이 0x000b 이므로 General Access Profile 은 끝
▶ Read By Type Request 요청
: Starting Handle, Ending Handle 에 마지막 0x000b 넣고 전송
▶ Error Response (0x01) 발생
: 0x08 request 에 대한 에러이고 Attribute Not Found 가 들어오네요.
▶ 서비스 별로 계속 Read By Type request/response가 나오나 해석방법은 위 내용과 비슷합니다.
<기타>
▶ nRF Connect 앱에 보여지는 서비스 && 특성
▶ Bluetooth Core_v5.3.pdf 참조 내용
→ Read By Type Request (0x08) 포맷
→ Read By Type Response (0x09) 포맷
→ Read By Group Type Request(0x10) 포맷
→ Read By Group Type Response(0x11) 포맷
→ Attribute Group Type / Attribute Type 에 들어가는 UUID 리스트
→ Attribute Data 포맷
그럼 오늘도 수고하세요.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/014.gif)
#wireshark #bluetooth #btsnoop_hci #ATT_READ_BY_GROUP_TYPE_REQ
#ATT_READ_BY_GROUP_TYPE_RSP #ATT_READ_BY_TYPE_REQ #ATT_READ_BY_TYPE_RSP