앱이 서버와 무엇을 주고받는지 직접 봐야 할 때가 있습니다. 내가 만든 서비스에 보안상 허술한 부분이 없는지 점검할 때도 그렇고, 연동해야 하는 외부 앱이 어떤 주소로 어떤 값을 보내는지 확인하고 싶을 때도 그렇죠. 문서가 없는 API를 상대로 일해야 하는 경우라면 더더욱 패킷부터 열어 보게 됩니다.
안드로이드나 iOS 에뮬레이터를 PC에 띄워 놓고 캡처하는 방법도 있지만, 이렇게 하면 PC 자체가 내보내는 트래픽이 한데 섞여서 보기가 번거롭습니다. 윈도우 업데이트, 메신저, 브라우저 탭까지 다 같이 잡히니까요. 그리고 에뮬레이터와 실제 기기는 동작이 미묘하게 다를 때가 있어서, 결국 실기기로 다시 확인하게 되는 일이 많습니다.
노트북을 공유기로 만들어 버리는 방식
아이디어는 단순합니다. 폰이 인터넷에 나가는 길목에 노트북을 세워 두면, 그 길목을 지나는 패킷은 전부 노트북에서 볼 수 있습니다. 순서는 이렇습니다.
- 노트북은 랜선으로 인터넷에 연결합니다.
- Connectify 같은 프로그램이나 운영체제가 제공하는 Ad-hoc(호스트 네트워크) 기능으로 노트북을 Wi-Fi AP로 만듭니다.
- 스마트폰이나 태블릿을 이 노트북 AP에 접속시킵니다.
- Wireshark 같은 패킷 스니핑 도구를 켜고, 폰에 할당된 IP로 필터를 겁니다.
4번까지 하면 그 기기가 주고받는 패킷만 깔끔하게 걸러져 나옵니다. Wireshark 표시 필터라면 ip.addr == 폰IP 형태로 걸어 두면 되고, 폰 IP는 폰의 Wi-Fi 상세 정보 화면에서 확인할 수 있습니다.
이 방법이 되는 장비 조건
여기서 많이 놓치는 부분이 하드웨어 조건입니다. 노트북이 한쪽으로는 인터넷을 받고, 다른 한쪽으로는 무선 신호를 뿌려야 하기 때문에 네트워크 카드가 두 개 필요합니다. 유선 랜카드와 무선 랜카드가 하나씩 있거나, 무선 랜카드가 두 개 달려 있어야 합니다. 무선 랜카드 하나만 있는 노트북으로 Wi-Fi에 붙은 상태에서 다시 AP를 띄우려고 하면 원하는 대로 안 됩니다. 요즘 얇은 노트북은 유선 랜 포트가 없는 경우가 많으니 USB 랜 어댑터를 하나 준비해 두면 편합니다.
캡처해 놓고 당황하는 지점
막상 잡아 보면 내용이 하나도 안 읽히는 경우가 대부분입니다. 요즘 앱 통신은 거의 HTTPS라서, 이 방식으로는 어느 서버(IP, 도메인)와 언제 얼마나 통신하는지는 보여도 본문은 암호화된 채로 보입니다. 접속 대상 파악이나 평문 HTTP를 쓰는 구형 장비·사내 시스템 점검에는 이 방법으로 충분하지만, HTTPS 본문까지 봐야 한다면 별도의 프록시 도구를 써야 합니다.
그리고 당연한 이야기지만 이건 내 기기, 내 서비스를 확인하는 용도로만 써야 합니다. 같은 AP에 다른 사람이 붙어 있다면 그 사람의 트래픽도 지나가게 되니, 테스트할 때는 내 장비만 접속시켜 두세요.