명령줄을 통해 Bluetooth 패킷/쓰기 요청을 BLE 장치에 보내는 방법은 무엇입니까?

명령줄을 통해 Bluetooth 패킷/쓰기 요청을 BLE 장치에 보내는 방법은 무엇입니까?

BLE 조명이 있는데 프로그래밍 방식으로 제어하고 싶습니다. 내 휴대폰(조명을 제어하는 ​​앱이 있음)과 조명 사이의 Bluetooth 패킷을 스니핑하여 다음 사항을 발견했습니다.

  • 장치 MAC 주소:XX:XX:XX:XX:XX:XX
  • 조명 상태를 제어하는 ​​핸들:0x0009
  • 조명 값 켜기:c7e3f68520e8d5ae5acd17760a01459d

이 문제를 조사하는 동안 나는 (더 이상 사용되지 않는) 유틸리티를 발견했습니다 gatttool. 해당 문서에 따르면 다음과 같이 BLE 장치에 쓸 수 있습니다.

sudo gatttool --char-write-req -b XX:XX:XX:XX:XX:XX -a 0x0009 -n c7e3f68520e8d5ae5acd17760a01459d

이것은 어느 정도 작동합니다. 휴대폰을 사용하여 조명에 연결하고 위 명령을 실행하면 다음과 같은 응답을 받습니다.

connect error: Connection refused (111)

이는 휴대폰으로 장치에 연결했기 때문에 예상되는 현상입니다. 전화 연결을 끊으면 다음과 같은 응답을 받습니다.

connect error: Device or resource busy (16)

불행히도 이것은 내가 보고 싶은 것이 아닙니다. 이 문제는 gatttool지원 중단으로 인해 발생할 수 있다는 내용을 온라인에서 읽었습니다 .

대체로 내가 찾고 있는 것은 다음과 같습니다.

  • gatttool이 상황에서 작동하는 방법에 대한 일부 정보/아이디어.
  • 다른 접근 방식(즉, none gatttool) 확인했지만 bluetoothctl장치에 연결할 수 없는 것 같습니다.

어떤 조언이라도 대단히 감사하겠습니다.

답변1

connect error: Device or resource busy (16)

인터페이스가 사용 중이라는 의미입니다. 노트북이 장치에 연결되어 있습니까? 아니면 장치를 사용하는 다른 도구가 있습니까? 예를 들어 스캔 bluetoothctl과 사용을 동시에 할 수는 없습니다. gatttool두 개의 서로 다른 인터페이스가 없다면 말이죠.

다음 명령을 사용하여 블루투스가 작동하는지 확인하세요. 여기서 hci0은 사용 중인 hci 인터페이스입니다.

$ hciconfig hci0 down && hciconfig hci0 up
$ service bluetooth restart

인터페이스를 확인하기 위해 -a는 선택 사항이지만 추가 정보를 제공합니다.

$ hciconfig -a

값을 읽을 때 16진수를 ASCII로 자동 변환합니다.

$ gatttool -b [MAC] --char-read -a [characteristic] | awk -F':' '{print $2}' | tr -d ' ' | xxd -r -p; printf '\n'

내 경험에 따르면 gatttool은 매우 유용합니다. 다른 도구를 사용해 보세요 bettercap.ubertooth one

관련 정보