Android通过tcpdump抓包(wifi, 2g, 3g都可以)

宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述Android通过tcpdump抓包(wifi, 2g, 3g都可以)相关的知识,希望能为你提供帮助。
http://blog.csdn.net/deng529828/article/details/20646197
1. 手机要有root权限
2. 下载tcpdump    http://www.strazzere.com/android/tcpdump
3.  adb push c:\wherever_you_put\tcpdump  /data/local/tcpdump
如果这一步真机无法push,可以用adb push c:\where_you_put\tcpdump /sdcard,即先将文件存入不需要权限的文件夹中,这里用sdcard,然后在传到/data/local/tcpdump。
4.  adb shell chmod 6755 /data/local/tcpdump
5, adb shell,    su获得root权限
6, cd /data/local
7, ./tcpdump -i any -p -s 0 -w /sdcard/capture.pcap
 
命令参数:
 
              # "-i any": listen on any network interface
# "-p": disable promiscuous mode (doesn‘t work anyway)
# "-s 0": capture the entire packet
# "-w": write packets to a file (rather than printing to stdout)
... do whatever you want to capture, then ^C to stop it ...
下载tcpdump文件到电脑 
  adb pull /sdcard/capture.pcap capture.pcap 
 
然后用wireshark打开即可看到数据包的详细信息。
 
2G、3G环境,那就必须root进去tcpdump 方式抓。
 
准备:
一、root 
  CF-auto-root:  http://autoroot.chainfire.eu/
    需要清理全部数据,注意备份
    不用怕root 后的不安全,root权限由superU管理授权。
    root 后推荐: 绿色保护、fqrouter、xposed、XPrivacy。
 
二、软件
    - adb  
      包含在android sdk中,通过USB debug 和android交互工具
    - tcpdump
      安装一个tcpdump 相关的app,app启动后会获取root权限将tcpdump安装好,当然不怕麻烦也可以下android tcpdump版本手动copy进去
----update 2015-1-2
  Android 5后,强制要求二进制文件支持PIE(Position-Independent-Executable) 提高系统安全性,能找到的tcpdump包基本都没PIE 无法执行,需修改tcpdump编译选项,刚找到编译好现成的了:http://www.liudonghua.com/?p=372  里面有下载(测试可用)。
 
    - busybox
      一个命令工具集合,在adb shell 提供大多数linux 下命令,我们要用到的nc 就在里面
 
三、离线抓包
  - 方式一:adb usb 连接进去执行抓包
      adb shell su
      tcpdump -s 0 -w /sdcard/tmp.pcap
 
  - 方式二: tcpdump app 上执行抓包
      相关app 很多
      好处:可以不用usb连接,也能抓到正常使用环境的网络包,
            usb 连接时android 系统将不会进入深度睡眠,深度睡眠时客户端行为可能不太一样(wake lock、alarm、wifi switch..)
            同时推荐betterbatterystat  http://forum.xda-developers.com/showthread.php?t=1179809
-   拿出包
      抓完后,因为文件是通过root 账号写的,windows下看不到,mac本身不支持,所以停止回到系统shell
      adb pull /sdcard/tmp.pcap .      
 
    四、 实时查看抓包
      通过分享热度、360移动wifi 都能做到,不过存在问题:
      1. 只能wifi网络
      2. 因为是中间节点,抓的包的时序不一定是客户端包的时序
      2G/3G网络也可以做到,原理 将tcpdump 标准输出给nc、adb 只是端口映射,本机nc 连接adb 映射端口,将流给创建pipe,wireshark 支持pipe流
      脚本:
      1. adb_tcpdump.sh

1 2 su tcpdump -s 0 -w - | busybox nc -l -p 11233
2. adb_wireshark.sh
1 2 3 4 5 6 7 8 9 10 adb shell < adb_tcpdump.sh &   sleep 1 adb forward tcp:11233 tcp:11233 sleep 1   mkfifo /tmp/sharkfin wireshark -k -i /tmp/sharkfin &   nc 127.0.0.1 11233 > /tmp/sharkfin
【Android通过tcpdump抓包(wifi, 2g, 3g都可以)】在mac 下执行./adb_wireshark.sh 就能弹出wireshark实时看看手机流量了

    推荐阅读