抓包工具[2]:tcpdump 抓包使用方法

Windows 下,针对手机端的抓包,导出格式为 pcap,使用 WireShark 和 Charles 都可识别。

使用此工具的准备工作:

  1. 确保手机已经拿到 root 权限
  2. 链接手机时,勾选上 USB 调试(定位问题很久找不到原因,有时候被坑在这里)
  3. 手机上已经安装了需要测试的包
  4. 本机已经下载好 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


抓包工具[2]:tcpdump 抓包使用方法_第1张图片

作为 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


抓包工具[2]:tcpdump 抓包使用方法_第2张图片
8. 停止

Ctrl+ C

9. 导出抓包结果文件

切换到本地,使用命令,pull 到本地 C:\adb 目录下

C:\adb>adb pull /sdcard/captrue.pcap

此时到 C:\adb 下查找此文件即可,也可 pull 到指定目录下,如桌面:
命令格式为:
adb pull []


如果上述步骤执行过程中,会遇到一些问题。

  1. 插上设备以后,必须先执行 adb devices,识别出设备以后,才能执行 abd shell 进入手机系统。

  2. 关于 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 是一个目录,不能直接放文件。

  1. 使用 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

整个过程如下所示


抓包工具[2]:tcpdump 抓包使用方法_第3张图片

如此再重新执行 adb shell 即可重新进入

END.

你可能感兴趣的:(抓包工具[2]:tcpdump 抓包使用方法)