3G 패킷 캡쳐를 해야될 필요가 생겨서 해당 패킷 캡쳐에 대해 조사를 했다.
기본적으로 필요한 환경은 루트 권한이 있어야 하고
Tcpdump의 바이너리가 필요하다.
해당 바이너리를 다운받고 /system/xbin같은 실행 권한이 있는 곳으로 파일을 복사한 뒤 실행한다.
실행
Tcpdump의 옵션을 활용하여 사용하면 된다.
자주 사용하는 명령어는
tcpdump –i rmnet0 –s 1514 –w /sdcard/test.pcap
와 같이 입력한다.
s옵션의 경우 패킷의 길이를 지정해주지 않으면 전체 패킷이 나오지않고 중간에 잘리므로 해당 옵션을 주고 패킷 캡쳐하도록 한다.
다만 자잘한 에러들이 발생을 해서 많이 고생했는데 다음과 같은 문제점들이 존재한다.
1. 실행이 안된다. chmod 777을 했는데도 안된다. (permission denied)
/system/bin이나 /system/xbin폴더 아래에 위치하면 실행권한이 있으므로 프로그램이 정상적으로 동작한다.
2. /system/xbin폴더에 복사가 되지 않는다. (cross device link)
Mount 명령어로 확인했을때 해당 폴더(bin,sbin,xbin)등에 write가 가능한 상태인지 확인하고 mount한다.
갤3 LTE기준으로는
#mount -o rw,remount -t yaffs2 /dev/block/mmcblockop9 /system
을 사용하면 된다고 한다.
3. Galaxy s4단말기 기준 interface문제(rmnet_usb0, tcpdump can't get usb bus ~)
바이너리 tcpdump2번을 사용한다. (해당 파일은 바이너리 패치를 통해 usb라는 단어가 들어있는 interface도 캡쳐한다.)
추측이지만 기존의 interface에서는 rmnet0와 usb0가 분리되어있는 기종들이 있는데 galaxy s4에서는 동시에 합쳐놓았다.
다만 일반 tcpdump에서는 usb인터페이스의 패킷을 캡쳐할 수 없는 것 같다.
rmnet_usb0의 인터페이스 명을 rmnet0로 바꿔도 된다고 하는데 아직 여기까지 실험하지는 않았다.
(ip link set [oldname] name [newname])
Reference
'Android' 카테고리의 다른 글
안드로이드 현재 화면 모든 텍스트 캡처 (0) | 2014.08.21 |
---|---|
android 화면 추출 (0) | 2014.08.21 |
안드로이드 어플리케이션 백그라운드에서 수행 (0) | 2014.08.21 |
안드로이드 터치 이벤트 발생시키기 (0) | 2014.08.21 |
안드로이드 채팅 소스 (0) | 2014.03.28 |