標籤:
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
| 12 |
sutcpdump -s 0 -w - | busybox nc -l -p 11233 |
2. adb_wireshark.sh
| 12345678910 |
adb shell < adb_tcpdump.sh & sleep 1adb forward tcp:11233 tcp:11233sleep 1 mkfifo /tmp/sharkfinwireshark -k -i /tmp/sharkfin & nc 127.0.0.1 11233 > /tmp/sharkfin |
在mac 下執行./adb_wireshark.sh 就能彈出wireshark即時看看手機流量了
Android通過tcpdump抓包(wifi, 2g, 3g都可以)