라즈베리 파이를 가지고 놀다보면 필연적으로 귀찮은 상황에 마주하게 된다.

(지저분..)
(지저분..)

평소에는 위와 같이 (다소 지저분하지만) 외장 모니터와 키보드, 마우스를 활용하여 관리 할 수 있다.

케이스를 착용한 모습
케이스를 착용한 모습

예쁘게 케이스에 끼워서 벽에 가져다 놓고, 유선랜을 사용하지 않고 WiFi 를 사용한다면 전원만 연결하면 된다. 

그런데 문제는 이런 상황일 때다. 디버깅을 하거나 재부팅 등 여러가지 조작을 원활하게 하고 싶은데, 모니터가 없으면 여간 불편할 수 밖에 없다.

필연적으로 ssh를 통해 원격접속하거나 xrdp 를 통해 Remote Desktop 방식을 사용하게 된다. 그런데 이마저도 IP 주소를 알아야만 가능하다. 우리가 가정집에서 사용하는 IP는 대부분 유동적이기 때문에 IP가 항상 바뀐다. 또한, 라즈베리 파이를 가지고 외부에 가서 연결한다던가, 카페 등의 공공장소에서 WiFi에 연결한다면 더더욱 IP를 알 수 없다. 최초에 한번만 알수 있으면 되는데.. 그게 문제다.

네트워크 (공유기) 관리자 페이지
네트워크 (공유기) 관리자 페이지

본인이 직접 관리하는 네트워크라면, 관리자 페이지에서 라즈베리 파이가 192.168.0.3으로 접속되었는지 쉽게 확인할 수 있을 것이다. 그런데, 내가 관리하는 네트워크가 아니라면? 알 수 없다.

가장 간단하게는 콘솔창에서 ifconfig를 수행한 결과를 확인하는 것이다. 그런데 이건 모니터가 있을때에야 가능한 일이다. 라즈베리 파이를 테스트하기 위해서 모니터를 항상 싸들고 다닐순 없지 않은가? 그래서 내가 생각한 방법은, IP를 확인하는 /sbin/ifconfig 를 수행하여 그 결과를 외부로 전송해주는 것이다. 짧은 구글링을 통해 다양한 방법을 시도했으나, 비효율적인 방법이 너무 많았다. 여기에 소개하는 내용은 그나마 합리적이고, 이해하기도 쉬운 코드다. 출처는 "파이썬을 활용한 네트워크 프로그래밍, 에이콘 출판"을 참고하였으며, 책에 나온 소스코드를 그대로 입력하여 실행해보면 오류가 발생한다. 오타와 약간의 오류를 수정하였고, 기능을 통합하였다. 아래의 소스코드는 리눅스 전용이다. (맥에서 해보니까 안된다. ifconfig의 구조체가 다르기 때문인 것 같다.)

이렇게해서 출력되는 결과를 ifconfig 와 비교해보면 다음과 같다.

위의 소스코드를 수행한 결과
위의 소스코드를 수행한 결과
/sbin/ifconfig 를 수행한 결과
/sbin/ifconfig 를 수행한 결과

결국 ifconfig 내용을 파싱해서 inet addr 부분만 가져오는 것이다. subprocess 를 사용해서 ifconfig 를 실행한 결과를 정규표현식(inet addr:)으로 처리해도 결과는 같다.

혹시 파이썬을 사용하는 것마저 귀찮다면? 쉘 스크립트 명령어만으로 가능하다.

우선 IP를 알아내는데 성공했다. 이 프로그램을 크론탭이나 init.d 에 등록한다면, 라즈베리 파이가 부팅됨과 동시에 이 명령이 수행될 것이고, 추가적으로 해당 IP를 원격지에 메일로 전송한다던가, Maria DB에 Insert하는 등의 방식을 사용한다면 - 나는 외부에서도 해당 IP가 무엇으로 셋팅되었는지 알 수 있을 것이다. 


하지만 역시나 아쉬움이 남는다. 이렇게 알아낸 IP는 127.0.0.1(로컬호스트)와 192.168.0.3(공유기 내부 아이피)이기 때문이다. 즉, 이 정보로는 같은 네트워크 안에서 밖에 활용을 할 수 없다. 만약 카페의 공유기에 접속을 시켜놨는데, 내가 그 공유기의 외부접속용 IP를 모른다면 SSH접속을 할 수 없다. 나도 같은 네트워크에 접속된 상태에서만 가능하다. 그러므로 원격지에 있는 나의 서버에서는 라즈베리 파이에 접속할 수 없다. 이 부분에 대해서 조금더 진보된 방식을 연구해보기로 한다. 다음 포스팅에 계속..


CPUU님의 창작활동을 응원하고 싶으세요?