Search
🎈

월패드 tcpdump를 활용한 엘리베이터 층수 패킷 추출

태그
위 카페 글을 따라 작업했으나, OpenWRT 버전이 업데이트 되어 혼동되는 부분이 있어 새로운 버전을 기준으로 작성합니다.

0. 원리

코콤 월패드 버전마다 다르겠지만 현재 거주하고 있는 아파트의 월패드에는 엘리베이터 층수를 표시해주는 기능이 있습니다.
엘리베이터 호출은 RS485 통신을 이용하지만, RS485 통신 패킷 정보에 엘리베이터 층수가 없습니다.
아마 관리실 어딘가에 있는 관리용 서버와 TCP를 이용해 따로 연결되어 있는 것으로 보입니다.
그렇다면 기존의 서버실 월패드 사이에 서버실 OpenWRT 월패드 OpenWRT를 추가합니다.
OpenWRT란 보통 공유기에 사용되는 운영체제입니다. 즉, 여기에 추가적인 프로그램을 설치하여 구동시킬 수 있습니다. 서버실과 월패드 사이의 패킷을 볼 수 있고, 패킷을 전송할 수도 있습니다.

1. 준비물

망고 공유기 GL iNet GL-MT300N-V2 Mini Router MANGO
OpenWRT를 이용한 공유기이며, 추가적인 소프트웨어를 설치하여 조작할 수 있습니다. 크기도 매우 작아 월패드 내부 공간에 숨기기에도 적합합니다.
전원 공급원 (12V to 5V 다운 모듈)
월패드는 보통 12V로 동작합니다. 망고 공유기의 경우 5V로 동작합니다. 월패드 내부 공간에는 220v 콘센트도 없고, 공간도 협소하여 어댑터를 이용할 수 도 없습니다. 월패드 내부에 있는 12V를 따와서 5V로 다운시켜 사용하도록 합니다.

2. 망고 공유기 설정

2-0. 하드웨어 설치
망고 공유기의 WAN포트에 인터넷 가능한 랜선을 연결하고 micro USB 타입으로 5V를 전원 인가하여 부팅합니다.
부팅이 완료되면 GL-MT300N-V2-XXX 라는 이름의 AP가 됩니다. GL-MT300N-V2-XXX Wifi에 연결해주세요.
2-1. 관리자 페이지 진입
GL-MT300N-V2-XXX에 연결 후 웹 브라우저에서 “192.168.8.1" 주소로 접근하면 공유기의 관리자 페이지로 진입합니다.
초기 진입시 관리자 비밀번호 입력이 필요하며 초기 비밀번호는 공유기 하단에 작성되어 있습니다.
초기 비밀번호 입력시 변경할 비밀번호를 입력하라는 창이 뜹니다, 신규 비밀번호를 입력해줍니다.
2-2. 무선 연결
현재는 망고 공유기의 WAN 포트에 인터넷이 가능한 랜선을 연결하여 인터넷에 연결된 상태입니다. 하지만 나중에 WAN, LAN 포트는 서버실과 월패드 연결에 사용해야 하므로 망고 공유기를 외부 무선 네트워크에 접속시켜놔야 합니다. 이 과정을 하지 않으면 갑자기 관리자 페이지 연결이 끊기고 공장 초기화를 해야하는 반복 작업을 하게 됩니다
기존 사용하던 공유기 무선 네트워크에 연결합니다. 정상적으로 연결되면 위 화면과 같이 뜹니다.
2-3. 추가 필요 소프트웨어 설치.
관리자 페이지 좌측 사이드바의 “더 많은 설정” > “고급 기능” 으로 진입하면 Luci 설치 페이지가 뜹니다. 설치 버튼을 눌러 설치합니다. 설치가 완료되면 아래 화면으로 바뀝니다.
192.168.8.1/cgi-bin/luci 링크 버튼을 눌러 Luci 관리자 페이지로 이동합니다.
192.168.8.1에서 사용했던 관리자 페이지는 iptime의 관리자페이지 처럼 openWRT의 일부 기능만 커스텀해서 사용할 수 있도록 지원합니다. OpenWRT는 매우 날것의 모든 설정값들을 조작할 수 있으므로 함부로 수정하면 라우팅 기능 자체가 정상동작하지 않을 수 있기때문에 안전한 설정값들만 바꿀 수 있는 일반 관리페이지와, Luci를 통해 모든 설정값을 바꿀 수 있는 고급 관리페이지를 따로 제공합니다.
2-4. Luci 관리 페이지 진입
앞선 과정에서 링크를 클릭하면 Luci 관리자 페이지로 이동합니다. Username은 ‘root’로 고정되어 있고, Password의 경우 2-1 과정에서 입력했던 비밀번호를 입력하면 됩니다.
2-5. 필요 소프트웨어 설치
Luci 관리자페이지 상단 메뉴바에서 “System > Software”로 진입합니다.
Filter에 tcpdump 를 입력합니다.
tcpdump를 설치합니다.
같은 과정으로 “mosquitto-client-ssl”과 “mosquitto-ssl” 을 설치합니다.
2-6. Interface 추가 및 Bridge 연결
여기가 가장 어렵(?)습니다.
개념적으로는 LAN과 WAN포트를 브릿징하여 WAN으로 들어오는 정보를 LAN에 그대로 전달하는 연결 과정을 만들어 줍니다.
WAN(서버실)로 부터 오는 정보를 LAN(월패드)로 연결되어 있는 현재 상태를 유지시켜 주는 겁니다.
그리고 중간에서 OpenWRT는 tcpdump로 tcp 패킷을 모두 감청합니다.
“Network > Switch에서 VLAN을 추가시켜줍니다.
최종적으로 위 스크린샷과 동일한 상태를 만들고 “Save & Apply” 버튼을 눌러 적용합니다. 적용은 망고 공유기가 재부팅하는 과정을 동반합니다. 따라서 GL-MT-300N-V2-XXX와 연결이 끊깁니다. 재부팅 후 GL-MT-300N-V2-XXX 에 다시 연결해주셔야 Luci 관리자페이지로 재접근이 가능합니다.
“Network” 에서 “Add new interface…” 버튼을 눌러 신규 인터페이스를 추가합니다.
Protocol은 Static address 여야 합니다. 월패드는 ip가 고정되어 있으므로 DHCP를 사용하면 안됩니다. 그래서 Static address로 설정합니다.
Bridge interfaces에 체크합니다. 브릿지용 인터페이스로 추가합니다.
추가가 완료되면 “Network > Interface” 화면의 목록에 WPAD기기가 추가됩니다.
여기까지 완료되면 망고 공유기의 WAN으로 들어오는 입력이 LAN으로 그대로 출력되게 됩니다.
이제 설치하러 갑니다.

3. 망고 공유기 설치

아직 12v to 5v 어댑터가 배송되지 않아 임시로 보조배터리를 이용해 망고 공유기에 전원을 인가하고 동작을 테스트합니다.
월패드를 열고
월패드로 기존 들어오던 랜선을 망고 공유기의 WAN 포트에
망고 공유기의 LAN포트에는 새로운 랜선을 꽂고 반대쪽은 월패드에 연결합니다.
그 후 월패드의 엘리베이터 기능 등이 정상적으로 동작하는지 확인합니다. 정상적으로 이루어진다면 망고 공유기의 설정은 끝입니다. 어댑터만 오면… 월패드 안쪽에 잘 숨겨주면 됩니다.

4. SSH 연결 설정

이제 OpenWRT 운영체제에 접속해서 tcpdump를 이용해 패킷감청을 해야합니다. 이때 SSH를 이용해 OpenWRT로 접근해야 하는데 Luci에서 추가 설정이 필요합니다.
“System > Administration” 에서 “SSH Access” 탭
SSH 접속을 허용할 Interface를 설정해야 하는데, lan으로 설정합니다.
“System > Administration” 에서 “SSH-Key” 탭
SSH 연결을 할 때 key가 필요합니다.
ssh key는 mac terminal 기준 아래 명령어로 생성합니다.
ssh-keygen -b 4096 -t rsa
Bash
복사
key 이름과 비밀번호는 자유롭게 생성합니다.
이 과정이 끝나면 명령어를 실행한 디렉토리에 {key}.pub 파일이 생성됩니다. 이 파일을 Luci에 넘겨줍니다.
정상적으로 pub이 업로드 되면 아래와 같은 화면이 됩니다.
이제 터미널에서 아래 명령어로 OpenWRT로 SSH접속합니다.
ssh -oHostKeyAlgorithms=ssh-rsa -i haos root@192.168.8.1
Bash
복사
여기서 haos는 각자 만들었던 개인키 파일명(path)를 입력해주면 됩니다.
To Be Continue…

4. tcpdump

tcpdump --number -i eth0.3 -x
Bash
복사
openWRT의 terminal 환경에서 위 명령어를 입력합니다.
그러면 알 수 없는 패킷들이 움직이는 것을 확인할 수 있습니다. 이 상태로는 패킷을 분석할 수 없기 때문에 Wireshark로 이 패킷을 연결해주도록 합니다.
패킷을 감청하는 tcpdump는 망고공유기(openWRT)에서 동작하고
패킷을 분석하는 wireshark는 개인 맥북에서 진행됨을 이해해야 합니다. (다른 환경임)
따라서. openWRT에서 tcpdump로 감청한 패킷을 wireshark가 있는 맥북에서 수신할 수 있도록 해줘야 합니다.
openWRT에서
tcpdump -i eth0.3 -U -s 0 -w - 'not port 22' | nc -l -p 12345
Bash
복사
를 입력하면 tcpdump로 가져온 데이터를 12345 포트로 전송합니다.
개인 맥북에서
nc 192.168.8.1 12345 | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -
Bash
복사
를 입력하면 망고 공유기의 12345 포트로부터 들어오는 데이터를 Wireshark로 분석하겠다는 명령어입니다.
Wireshark의 필터를 위 스크린샷처럼 적용하면 월패드로 들어오는 유효 정보만 필터링해서 볼 수 있습니다.

5. 엘리베이터 층수 패킷 찾기

알 수 없는 패킷들이 막 들어오는데 여기서 엘리베이터 층수 정보에 해당하는 정보만 찾아야 합니다. 엘리베이터 호출 버튼을 누르고 어떤 데이터들이 수신되는지 클릭해봅니다.
월패드에서 표시되는 층수와 들어오는 패킷을 실시간을 살펴보니
저는 저 위치의 정보가 엘리베이터 층수를 표시하는 정보임을 확인했습니다.

5. MQTT publish

OpenWRT에서 아래 명령어를 통해 수신한 tcpdump 데이터를 MQTT로 발행합니다.
tcpdump -i eth0.3 -x -l src port 15000 | mosquitto_pub -r -h {haos ip: 192.168.0.3} -p 1883 -t "network/packets" -u {mqtt logins id} -P {mqtt logins password} -d -l
Bash
복사
haos는 MQTT brocker adds-on이 설치되어 있는 HA의 ip 주소를 의미합니다. 당연히 망고 공유기와 동일한 네트워크 상에 존재해야하며 해당 IP로 접근할 수 있어야 합니다.
mqtt logins id/password. MQTT Brocker Adds-on 설정에서 작성한 Logins 정보를 입력합니다.