Windows 下,針對手機端的抓包,導出格式為 pcap,使用 WireShark 和 Charles 都可識別。
使用此工具的準備工作:
- 確保手機已經拿到 root 權限
- 鏈接手機時,勾選上 USB 調試(定位問題很久找不到原因,有時候被坑在這里)
- 手機上已經安裝了需要測試的包
- 本機已經下載好 adb 和 tcpdump,我存在放在 C:\adb 下
以下我們將 tcpdump 文件從 PC 傳到手機端,并執行抓包,導出包
1. 將 tcpdump 從 PC 傳到手機上:
C:\adb>adb push C:\adb\tcpdump /sdcard/tcpdump
2. 進入手機系統
利用 adb 建立與手機的鏈接,進入 shell 交互模式,并切換為 root 身份
C:\adb>adb shell
shell@android:/ $ su
3. 將 tcpdump 從 sdcard 移動到 系統中
必須得將 tcpdump 輸出到 /data/local 下面才能使用
shell@android:/ # cat /sdcard/tcpdump > /data/local/tcpdump
這一步可以用 cp 實現,但是一般設備中不包含此命令。
而,這里為什么不用 mv 命令的原因是,會出錯:failed on '/sdcard/tcpdump' - Cross-device link
作為 root ,/data 目錄我們沒有權限直接訪問,因為 data 的權限是給 system
的,但是 /data/local 是有給到 root 的,所以要進入到 local 下面操作,tcpdump 放到 local 中。
4. 查看權限
進入 /data/local 目錄,依然可以參考上圖
-rw-r----- root root 645840 2014-05-29 19:57 tcpdump
5. 更改權限
shell@android:/data/local # chmod 775 tcpdump
6. 抓包
shell@android:/data/local # ./tcpdump -p -vv -s 0 -w /sdcard/captrue.pcap
7. 過程顯示
tcpdump:listening on eth0
8. 停止
Ctrl+ C
9. 導出抓包結果文件
切換到本地,使用命令,pull 到本地 C:\adb 目錄下
C:\adb>adb pull /sdcard/captrue.pcap
此時到 C:\adb 下查找此文件即可,也可 pull 到指定目錄下,如桌面:
命令格式為:
adb pull <remote> [<local>]
如果上述步驟執行過程中,會遇到一些問題。
插上設備以后,必須先執行 adb devices,識別出設備以后,才能執行 abd shell 進入手機系統。
關于 push 文件到手機中遇到的可能存在的問題
2.1. 如果使用以下命令,會提示 Permission denied,原因是我們沒有權限訪問 /data/local。
C:\adb>adb push C:\adb\tcpdump /data/local
而,C:\adb>adb push C:\adb\tcpdump /data/local/tcpdump 是否可行,有待驗證
2.2. 不能直接放到 sdcard 下:
C:\adb>adb push C:\adb\tcpdump /sdcard
如果不創建一個新的目錄,上面的命令會出錯,提示 sdcard 是一個目錄,不能直接放文件。
- 使用 adb shell 時提示 abd server is out of date. killing...
此時是 adb server 端口被占用了,可用如下方法進行解決
3.1. 查看端口號
C:\adb>adb nodaemon server
cannot bind 'tcp:5037'
3.2. 找到端口對應的 pid
C:\adb>netstat -ano | findstr "5037"
3.3. 關閉占用端口的進程
C:\adb>tskill 10220
整個過程如下所示
如此再重新執行 adb shell 即可重新進入
END.