2G、3G環境,那就必須root進去tcpdump 方式抓。php
準備:linux
1、root android
CF-auto-root: http://autoroot.chainfire.eu/shell
須要清理所有數據,注意備份windows
不用怕root 後的不安全,root權限由superU管理受權。安全
root 後推薦: 綠色保護、fqrouter、xposed、XPrivacy。網絡
2、軟件app
- adb tcp
包含在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 就在裏面
3、離線抓包
- 方式一: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 .
4、 實時查看抓包
經過分享熱度、360移動wifi 都能作到,不過存在問題:
1. 只能wifi網絡
2. 由於是中間節點,抓的包的時序不必定是客戶端包的時序
2G/3G網絡也能夠作到,原理 將tcpdump 標準輸出給nc、adb 只是端口映射,本機nc 鏈接adb 映射端口,將流給建立pipe,wireshark 支持pipe流
腳本:
1. adb_tcpdump.sh
su tcpdump -s 0 -w - | busybox nc -l -p 11233
2. adb_wireshark.sh
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
在mac 下執行./adb_wireshark.sh 就能彈出wireshark實時看看手機流量了