Unix OS 等でtcpdumpに触れたことがある方向けに書くので、わからない方はスルーしてください。
準備
- Android端末のroot取得
- Android Virtual Devices ManagerにてAndroid端末と同じバージョンの仮想端末を作成する
Android tcpdump Downloads
https://www.androidtcpdump.com/android-tcpdump/downloads
キャプチャしてみよう
- Android Virtual Devices Manager (以下AVD)にて、Android端末と同バージョンの仮想端末を起動。
- 仮想端末からtcpdumpを取得。
> adb -e pull /system/xbin/tcpdump C:\temp 737 KB/s (652964 bytes in 0.865s)
- Android端末とPCをつなぎます。
- 認識しているか確認。
> adb devices List of devices attached xxxxxxxxxxxxxxxxx device
- エミュレータから取得したtcpdumpを端末に入れます。
> adb push C:\temp\tcpdump /sdcard/tcpdump 3021 KB/s (652964 bytes in 0.211s)
- /system にtcpdumpをおけるよう、rwモードでリマウント。
> adb shell shell@android:/ $ su su root@android:/ # mount -o remount,rw /dev/block/mtdblock0 /system mount -o remount,rw /dev/block/mtdblock0 /system
- tcpdumpが無いことを確認。
root@android:/ # ls /system/xbin/tcpdump ls /system/xbin/tcpdump /system/xbin/tcpdump: No such file or directory
- tcpdumpのコピーと実行権付与。
root@android:/ # cp /sdcard/tcpdump /system/xbin/tcpdump cp /sdcard/tcpdump /system/xbin/tcpdump root@android:/ # ls -l /system/xbin/tcpdump ls -l /system/xbin/tcpdump -rw-rw-r-- root root 652964 2013-10-26 11:46 tcpdump root@android:/ # chmod 755 /system/xbin/tcpdump chmod 755 /system/xbin/tcpdump root@android:/ # ls -l /system/xbin/tcpdump ls -l /system/xbin/tcpdump -rwxr-xr-x root root 652964 2013-10-26 11:46 tcpdump
- tcpdumpコマンド発行。
root@android:/ # tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
- Android端末でキャプチャしたいアプリなど起動する。
- Ctrl+Cでキャプチャを終了
- Wiresharkなどでキャプチャしたファイルを開く
> adb shell shell@android:/ $ su su root@android:/ # tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytesインタフェースを調べてキャプチャする場合は以下
shell@android:/ # tcpdump -D 1.dummy0 [Up, Running] 2.wlan0 [Up, Running] 3.rmnet_usb0 [Up, Running] 4.lo [Up, Running, Loopback] 5.any (Pseudo-device that captures on all interfaces) [Up, Running] 6.nflog (Linux netfilter log (NFLOG) interface) [none] 7.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none] 8.sit0 [none] 9.usb0 [none] 10.rmnet_data0 [none] 11.r_rmnet_data0 [none] 12.rmnet_data1 [none] 13.r_rmnet_data1 [none] 14.rmnet_data2 [none] 15.r_rmnet_data2 [none] 16.rmnet_data3 [none] 17.r_rmnet_data3 [none] 18.rmnet_data4 [none] 19.r_rmnet_data4 [none] 20.rmnet_data5 [none] 21.r_rmnet_data5 [none] 22.rmnet_data6 [none] 23.r_rmnet_data6 [none] 24.rmnet_data7 [none] 25.r_rmnet_data7 [none] 26.r_rmnet_data8 [none] shell@android:/ # tcpdump -i 2 -vv -w /sdcard/tcpdump_20131026.pcap tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytesちなみに私が使用した仮想端末に入っていたtcpdumpのバージョンは以下。
root@android:/ # tcpdump --help tcpdump --help tcpdump version 3.9.8 libpcap version 0.9.8 Usage: tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -Z user ] [ expression ]