前言
Android 网络通信是 Android 开发的一个很重要的部分,而抓包能够查看网络通信的具体细节,因此在平时开发过程中经常用到。
本文将讲解几种抓包形式:
- Charles 实现实时 HTTP/HTTPS 抓包。
- Wireshark+Tcpdump 实现非实时 TCP+HTTP 抓包。
- Wireshark+Tcpdump+nc 实现实时 TCP+HTTP 抓包。
- Stetho 实现侵入式 HTTP 抓包。
如果只需要查看 HTTP 包,那么只需要使用 Charles,但是如果想要看 TCP 包,那么需要用到 Wireshark。
本文的环境是 MAC OS,Android 手机必须 Root。
- Charles 安装:http://blog.csdn.net/jiangwei0910410003/article/details/41620363
- Wireshark 安装:http://blog.csdn.net/phunxm/article/details/38590561
Charles 实时 HTTP 抓包
- 进入 WIFI 设置,设置 WIFI 网络的代理,如下图:
- 设置完之后,你在手机的浏览器访问”tu.qq.com”,就能在 Charles 中实时查看,如下图:
当然,Charles 也可以抓取 HTTPS 包,但是因为 HTTPS 的报文是加密的,因此为了能够看到明文的报文,过程如下:
- 从 这里 下载名为”charles.crt”证书,并通过”adb push charles.crt /mnt/sdcard”放入手机,然后”设置”->”安全”->”从存储设备安装”为手机安装证书。
这样就可以了。你可以在浏览器中输入”www.baidu.com”,发现可以看到请求和响应都是明文了。
Wireshark+Tcpdump 非实时 TCP+HTTP 抓包
Charles 只能抓取并查看 HTTP(S) 的包,但是如果想抓取并查看 TCP 的包,就不能不用 Tcpdump(抓取 TCP 包) 和 Wireshark(查看 TCP 包)。
很多人会说,你抓 TCP 包干啥,又没什么用。因为 HTTP 协议是建立在 TCP 协议之上的,因此通过查看 TCP 包的情况可以看出:HTTP 通信的 TCP 连接是否被复用。
- 从 这里 下载 Tcpdump。
- 将 tcpdump 放入手机:
adb push ./tcpdump /data/local/tcpdump
。 - 将 tcpdump 的权限变为可执行:
chmod +x tcpdump
。 - 开始抓包:
/data/local/tcpdump -vv -s 0 -w /mnt/sdcard/pcapture.pcap
。其中 “-s 0” 表示每个包都抓取全部长度,而不是部分长度;”-w /mnt/sdcard/pcapture.pcap” 表示抓取的包写入指定文件;”-vv” 表示显示多一些信息,如果要显示更多信息可以用 “-vvv”。 - 按下 “contrl+c” 结束抓包。
- 将”/mnt/sdcard/pcapture.pcap” 移到电脑上:
adb pull /mnt/sdcard/pcapture.pcap <指定目录>
。 - 通过 Wireshark 进行分析。我们可以通过 Wireshark 的 “Follow TCP Stream” 查看一条 TCP 连接是否被复用。
TCPDUMP 默认采用混杂模式,即能够抓取其他进程的包。
Wireshark 实时 TCP+HTTP 抓包
非实时抓包一般已经足够了,但是不是特别方便,也不够装逼,因为每次抓包都需要做很多步骤,先手机抓,抓完了再导入电脑看。因此这里给出一个实时抓取并查看 TCP+HTTP 包的方法。
基本思路如下:
- 为手机安装 Busybox:http://xiazdong.me/2015/06/30/introduction-to-busybox/
- 在 adb shell 中运行
mount -o remount,rw /
:将目录从只读变为可读写。 - 在 adb shell 中运行
/data/local/tcpdump -n -vv -s 0 -w – | nc -l -p 11233
:手机开始抓包。 - 另开一个终端运行
adb forward tcp:11233 tcp:11233 && nc 127.0.0.1 11233 | sudo wireshark -k -S -i –
实现将手机抓的包传送到电脑的 Wireshark 中。
你会发现 Wireshark 里面有很多 SSDP 的报文,因为 SSDP 是基于 UDP 协议的,因此只需要输入 TCP 就能过滤掉他。
- Wireshark 常用过滤命令点这里。
- Netcat 命令:https://www.91ri.org/7761.htmlhttps://www.91ri.org/7761.html
Stetho 实现侵入式抓包
前面介绍的几种方法的优点是非侵入式,即不需要修改原应用的代码。方法见:使用Chrome来调试你的Android App。在开发的时候,Stetho是很好的选择,因为不仅能抓包,还能看到数据库内容。