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.