盒子
盒子
文章目录
  1. 前言
  2. Charles 实时 HTTP 抓包
  3. Wireshark+Tcpdump 非实时 TCP+HTTP 抓包
  4. Wireshark 实时 TCP+HTTP 抓包
  5. Stetho 实现侵入式抓包
  6. 参考文献

Android 抓包实践总结

前言

Android 网络通信是 Android 开发的一个很重要的部分,而抓包能够查看网络通信的具体细节,因此在平时开发过程中经常用到。

本文将讲解几种抓包形式:

  1. Charles 实现实时 HTTP/HTTPS 抓包。
  2. Wireshark+Tcpdump 实现非实时 TCP+HTTP 抓包。
  3. Wireshark+Tcpdump+nc 实现实时 TCP+HTTP 抓包。
  4. Stetho 实现侵入式 HTTP 抓包。

如果只需要查看 HTTP 包,那么只需要使用 Charles,但是如果想要看 TCP 包,那么需要用到 Wireshark。

本文的环境是 MAC OS,Android 手机必须 Root。

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 就能过滤掉他。

Stetho 实现侵入式抓包

前面介绍的几种方法的优点是非侵入式,即不需要修改原应用的代码。方法见:使用Chrome来调试你的Android App。在开发的时候,Stetho是很好的选择,因为不仅能抓包,还能看到数据库内容。

参考文献

支持一下
扫一扫,支持xiazdong