본문 바로가기

INTERTLUDE Project _ Bluetooth

kail linux에서 pybluez 라이브러리를 사용하여 Bluetooth 통신을 구현하는 방법

  kail linux에서 pybluez 라이브러리를 사용하여 Bluetooth 통신을 구현하기 위해서는,

 구현하고자 하는 PC에, 관리자의 권한으로 virtualbox kali linux 설치되어 있어야 합니다.

 

virtualbox kali linux 설치되어있다는 가정하에,

pybluez 라이브러리를 사용하여 Bluetooth 통신을 구현하기 위한 실습을 진행하도록 하겠습니다.

 

해당 실습을 진행하기 위해서는 첫 번째로, virtualbox를 관리자 권한으로 실행해야 합니다.   

 

 

다음으로는, 설치되어 있는 kali linux를 선택하고 [설정] 클릭합니다

 

세 번째로는, 설정에 들어가고 난 후

[포트] > [USB]를 선택하고 USB 컨트롤러는 나의 블루투스 어댑터 사양에 맞춰 설정합니다.   

(사양을 알 수 없다면 일반적으로 USB2.0 또는 3.0 선택)

 

이후로는 USB 장치 필터에 나의 블루투스 어댑터를 추가한 후에, [확인] 버튼을 클릭합니다.

 

 

위의 세 가지 과정을 모두 거쳤다면  kali linux를 시작하고, 터미널을 실행합니다.

 

 

터미널을 실행하고 난 이후에는, hciconfig의 명령어를 입력합니다

 

hciconfig의 명령어는, Linux 시스템에서 Bluetooth 장치의 구성 및 상태를 관리하기 위해 사용됩니다.

주로 Bluetooth 하드웨어의 설정을 표시하고 제어하기 위해 사용되는 명령어에 해당합니다.

 

 

해당 명령어를 입력하고 나면,

1. hci0: 로 표시되는, 시스템에서 사용하는 각 블루투스 어댑터의 고유한 식별자인 HCI 인터페이스 이름을 알 수 있습니다.

2. BD Address로 표시되는, Bluetooth 어댑터의 MAC 주소가 나타납니다.

3. Bluetooth 상태 (Bluetooth Status)가 나타납니다.  Bluetooth 어댑터가 활성화되었는지 또는 비활성화되었는지 여부가 여기에 표시되는 것입니다. UP은 활성화된 상태를 나타내는 것이고, DOWN은 비활성화된 상태를 나타냅니다.

 

해당 명령어를 입력한 결과, DOWN이 나타난다는 것을 통해, 

현재 Bluetooth 상태가 비활성화되어 있음을 확인할 수 있습니다. 

 

4.  다음으로는,  RX/TX 패킷 (RX/TX Packets)가 나타납니다.

RX/TX 패킷 은, Bluetooth 어댑터가 수신 및 송신한 패킷의 수를 보여줍니다.

 

Hciconfig 명령어를 통해서, Bluetooth 어댑터의 현재 상태를 파악할 수 있습니다. 

 

다음으로는, sudo hciconfig hci0 up 명령어를 입력하는 과정을 진행하겠습니다. 

 

1. Sudo 명령어는, (sudo Super User Do의 약자로) 곧 관리자 권한으로 명령을 실행하기 위한 명령어입니다.

2. Hciconfig 명령어는 이 전 과정에서도 살펴볼 수 있듯이, Bluetooth 어댑터를 구성하고 관리하기 위한 명령어입니다.

3. hci0 명령어는, Bluetooth 어댑터의 인터페이스 이름을 나타냅니다.

여기서 hci0는 첫 번째 Bluetooth 어댑터를 가리킵니다. 시스템에 여러 개의 Bluetooth 어댑터가 연결된 경우, 인터페이스 이름은 hci1, hci2 등으로 바뀔 수 있는 것입니다. 

4.Up 명령어는, Bluetooth 어댑터를 활성화하는 옵션입니다.

이 명령을 사용하면 선택한 Bluetooth 어댑터가 활성화되어 Bluetooth 기능을 사용할 수 있게 됩니다. 

 

따라서 sudo hciconfig hci0 up 명령어는,

관리자 권한으로 실행하여 hci0라는 이름의 Bluetooth 어댑터를 활성화하는 명령어입니다.

 

 

sudo hciconfig hci0 명령어를 입력한 이후에, 다시 hciconfig를 입력해 보면

이전의 해당 명령어를 입력했을 때와 다른 명령어 출력 화면이 나타난다는 것을 알 수 있습니다.

 

처음에 hciconfig를 입력하였을 때는, 비활성화된 상태인 DOWN이 나타났는데,

지금의 과정을 거쳤을 때는 UP RUNNING으로 Bluetooth 어댑터를 활성화된 상태라는 것을 확인할 수 있습니다.

 

 

 다음으로는, service bluetooth status 명령어를 입력하였습니다. 

 

Service 명령어란, 시스템 서비스를 관리하는 명령어입니다.

Bluetooth 명령어란, Bluetooth 서비스를 나타냅니다.

Status 명령어란, 서비스의 현재 상태를 확인하는 옵션입니다.

이 옵션을 사용하면 해당 서비스가 현재 실행 중인지 아니면 정지된 상태인지 등의 정보를 확인할 수 있는 것입니다. 

 

따라서 service bluetooth status 명령어를 실행하면, Bluetooth 서비스의 현재 상태를 확인할 수 있습니다.

곧 해당 명령어를 통하여 Bluetooth 서비스가 활성화되어 있는지, 정상적으로 작동하는지 등의 확인이 가능합니다. 

해당 명령어를 입력하고 나면,

 

1. Bluetooth service: 서비스의 이름이 나타납니다.

2. Loaded: 서비스 설정 파일이 로드되어 있는지 여부가 나타납니다.

3. Docs: 관련 문서의 위치를 나타냅니다.

4. Active: 서비스의 활성화 상태를 나타냅니다. active (running)은 서비스가 현재 실행 중임을 의미합니다.

 

그런데 결과에서 inactive(dead)의 의미는, 서비스가 현재 비활성화되어 있음을 나타냅니다.

, 서비스가 현재 실행되고 있지 않음을 의미하는 것입니다.

 

해당 명령어의 결과를 통하여, 현재 블루투스 서비스가 비활성화되어 있음을, 곧 실행되지 않고 있음을 알 수 있습니다.

 

 

그렇기에 해당 서비스를 활성화하기 위한, service bluetooth start 명령어를 입력하는 과정을 거쳐야 합니다.

 

Service 명령어란, 시스템 서비스를 관리하는 명령어입니다.

Bluetooth 명령어란, Bluetooth 서비스를 나타냅니다.

이 부분은 서비스의 이름이며, 여기서는 Bluetooth 서비스를 지칭하는 것입니다.

Start 명령어란, 서비스를 시작하는 옵션입니다. 이 옵션을 사용하면 선택한 서비스가 시작됩니다.

 

service bluetooth start 명령어란, Kali Linux 시스템에서 Bluetooth 서비스를 시작하는 명령어입니다.

 

 

해당 명령어를 입력한 후에, 다시 service bluetooth status 명령어를 실행해 보면

 

Active : active (running)으로 나타나는 결과를 통해,

현재 시스템에서 Bluetooth 서비스가 활성화되어 있으며 곧 서비스가 현재 실행 중인 상태임을 알 수 있습니다.

 

해당 과정을 거치면 kail linux 시스템에서 블루투스를 사용 가능한 상태가 되는 것입니다! 

 

 

kail linux 시스템에서 블루투스를 사용 가능한 상태로 구축한 뒤에, hcitool scan 명령어를 입력하였습니다.

 

Bluetooth 기기를 찾는 명령어에 해당합니다.

이 명령을 실행하면, Kali Linux Bluetooth 어댑터를 사용하여 주변에 있는 Bluetooth 기기를 찾게 됩니다.

찾은 각 기기에 대해 해당 기기의 MAC 주소와 기기 이름이 표시됩니다.

 

해당 명령어를 이용하면, 블루투스 어댑터를 사용하여 주변의 다른 Bluetooth 기기를 찾고, 그들의 MAC 주소와 기기 이름을 보여줍니다. 이 명령은, 주변의 Bluetooth 기기를 탐지하고 인접 기기를 확인하는 데 유용하게 이용됩니다.

 

다음으로는, pybluez 예제 코드를 이용해서, 시스템 내에서 해당 기기와 블루투스 통신을 하는 과정을 진행해 보도록        하겠습니다.

 

pybluez 예제는,  해당 블로그를 참조하여 (블로그 링크 : https://blog.naver.com/cjinnnn/223047209187 ) 만들었습니다.

 

예제 파일의 이름은 HelloWorld.py으로 설정하고, gedit HelloWorld.py & 해당 명령어를 통하여 구현하였습니다.

 

HelloWorld.py 소스 코드는 블루투스를 사용하여 지정된 MAC 주소의 장치와 통신하는 파이썬 프로그램입니다.

HelloWorld.py 파일 내에 find_service함수의 address 파라미터 값에, 복사해 둔 MAC주소를 문자열 형태로 붙여 넣고 저장하였습니다.

 

 

 

다음으로는, python3 HelloWorld.py 명령어를 실행하였습니다.

 

python3, python3 인터프리터를 실행하는 명령어입니다. 이를 통해 파이썬 코드를 실행할 수 있습니다.

HelloWorld.py: 실행하고자 하는 파이썬 소스 코드 파일의 이름입니다 ".py" 확장자는 파이썬 소스 코드 파일임을 의미합니다. 따라서 위의 명령어를 실행하면,  현재 디렉터리에 있는 "HelloWorld.py"라는 파일이 python3 인터프리터를 사용하여 실행되는 것입니다.

 

 

명령어를 실행하였을 때,

"Connecting to [장치 이름] on [호스트 주소]"와 같은 연결 메시지가 출력되었다면,

주어진 MAC 주소의 Bluetooth 장치가 주변에 발견되고, 해당 서비스 연결에 성공했다는 것을 의미합니다.

 

또한 서비스 이름, 호스트 주소, 포트 번호 등의 다양한 서비스의 속성에 대한 정보가 출력되는 것을 확인할 수 있습니다.

 

그러나, 해당 명령어를 실행하였을 때 Connecting on "None" on MAC 주소가 출력된 것을 통해서 

블루투스 소켓 통신에 실패하였다는 것을 알 수 있습니다.

 

Connecting on "None" on MAC 주소의 출력 메시지는 일반적으로  1. 블루투스 서비스를 찾지 못하였거나 2. 서비스의 호스트 이름이나 주소를 올바르게 가져오지 못한 경우에 발생하게 되는 것이라는 사실을 발견하였습니다. 

 

해당 오류 메시지가 출력되었기에, 1. 정확한 MAC 주소가 입력되었는지를 확인하며 2. 블루투스 장치가 주변에 실제로 발견되었는지 확인하며 3. 코드에서 오류가 발생하거나, 잘못 입력된 부분이 있는지도 확인하였습니다

 

그러나 블루투스 소켓 통신 오류 해결 방법을 찾지 못하였기에,  kail linux에서 pybluez 라이브러리를 사용하여 Bluetooth 통신을 구현하는 방법의 실습 과정은 여기서 중단하며 해결 방법을 찾아와서 추후에 해당 글을 더 보완하도록 하겠습니다!

 

감사합니다.