ようへい
ラベル tcpdump の投稿を表示しています。 すべての投稿を表示
ラベル tcpdump の投稿を表示しています。 すべての投稿を表示

2013年10月26日土曜日

Android でパケットキャプチャしてみる

Android でパケットキャプチャをしてみたので、忘れないようにメモ。
Unix OS 等でtcpdumpに触れたことがある方向けに書くので、わからない方はスルーしてください。

準備

  1. Android端末のroot取得
  2. Android Virtual Devices ManagerにてAndroid端末と同じバージョンの仮想端末を作成する
※以下から落とした tcpdump でも使えます。
Android tcpdump Downloads
https://www.androidtcpdump.com/android-tcpdump/downloads

キャプチャしてみよう

  1. Android Virtual Devices Manager (以下AVD)にて、Android端末と同バージョンの仮想端末を起動。
  2. 仮想端末からtcpdumpを取得。
    > adb -e pull /system/xbin/tcpdump C:\temp
    737 KB/s (652964 bytes in 0.865s)
  3. Android端末とPCをつなぎます。
  4. 認識しているか確認。
    > adb devices
    List of devices attached
    xxxxxxxxxxxxxxxxx    device
  5. エミュレータから取得したtcpdumpを端末に入れます。
    > adb push C:\temp\tcpdump /sdcard/tcpdump
    3021 KB/s (652964 bytes in 0.211s)
  6. /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
  7. tcpdumpが無いことを確認。
    root@android:/ # ls /system/xbin/tcpdump
    ls /system/xbin/tcpdump
    /system/xbin/tcpdump: No such file or directory
  8. 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
  9. 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
  10. Android端末でキャプチャしたいアプリなど起動する。
  11. Ctrl+Cでキャプチャを終了
  12. 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 ]
関連記事