Android でパケットキャプチャをしてみたので、忘れないようにメモ。
Unix OS 等で
tcpdumpに触れたことがある方向けに書くので、わからない方はスルーしてください。
準備
- Android端末のroot取得
- Android Virtual Devices ManagerにてAndroid端末と同じバージョンの仮想端末を作成する
※以下から落とした tcpdump でも使えます。
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などでキャプチャしたファイルを開く
tcpdump導入済みであればこんな感じ。
> 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 ]