Android 用 Wireshark 和 tcpdump 抓包
今天总结下两种抓取android手机网络数据包的方法,一种是直接用Wireshark,这种方式简单快捷,唯一的要求是需要电脑和手机连在同一个局域网下,共用同一个wifi热点;另一种是利用tcpdump抓取手机的数据包,然后通过Wireshark查看分析抓取到的数据,相比于第一种,使用起来要麻烦一些,而且需要root手机,但不要求手机和电脑处在同一个网络下。
利用 Wireshark 抓包
这个操作很简单,最直接的就是让电脑和手机连上同一个wifi,然后打开Wireshark,找到路由器的网卡,选择并开始抓包,此时手机访问网络的数据就能被Wireshark抓取到。
利用 tcpdump 抓包
- 下载tcpdump
在Trinea的这篇博客中给了一个下载链接,不过经实践,这个tcpdump在一些手机上不能使用,原因第三步会说明,并给出可用的下载链接。
- 将其复制到手机上
第一步下载下来的是一个二进制文件,需要把他复制到手机上在shell模式下运行,具体操作如下:
adb root
adb push 下载/tcpdump /data/local/
adb shell chmod 6755 /data/local/tcpdump
关于adb的使用可以查看这里。
- 运行tcpdump抓包
执行adb shell /data/local/tcpdump -n -s 0抓取的网络数据会在屏幕上滚动显示,通过Ctrl+C停止。但是我执行这条语句后返回错误:error: only position independent executables (PIE) are supported.。google得知是因为在Android L就开始PIE这个安全机制,即如果调用的可执行文件不是基于PIE方式编译的,则无法运行。所以需要下载通过PIE编译的tcpdump,对应的文件可以在这里下载。通过上面的命令无法查看具体的数据包,所以可以将抓取的结果保存在文件里然后通过Wireshark分析,操作如下:
adb shell
cd /data/local/
tcpdump -i any -p -s 0 /sdcard/capture.pcap
通过Ctrl+C终止抓包。此时结果已经保存在手机sdcard的capture.pcap文件里。
- 用Wireshark查看数据
通过命令adb pull /sdcard/capture.pcap .将文件复制到本地,然后用Wireshark打开分析即可,下图是我实际操作获取的结果:
可以看到tcp的三次握手过程和手机向微信发出的post请求。