Android packet capture

我们在调试时需要分析API请求的返回数据用来定位问题,这时候会需要使用抓包工具。

应用内抓包

App自己把收到的Response打印出来,方便我们检查数据或者用来创建Data Class,可以通过给okhttp Client设置拦截器来把数据打印出来。

1
2
3
4
5
// stethoVersion = '1.5.1'
// okhttpVersion = '3.14.2'
api "com.facebook.stetho:stetho-okhttp3:$rootProject.stethoVersion"
api "com.facebook.stetho:stetho:$rootProject.stethoVersion"
api "com.squareup.okhttp3:logging-interceptor:$rootProject.okhttpVersion"

配置代码

Stetho是Facebook开源的一个Android app调试工具,可以在Chrome上查看App网络数据和应用数据:

用logging-interceptor可以直接在logcat:

应用外抓HTTP/HTTPS

应用内抓包都需要依赖ADB,如果你是测试人员没有开发调试环境,或者运行的是正式版本App,又或者你想研究一下竞对App,这时你可能就会需要更强大的抓包工具了。Charles(青花瓷)和Fiddler是这类工具的代表,用法也比较类似,这里就说下Charles用法吧。

安装

官网直接选择对应系统下载安装

配置

现在其实已经可以抓Http请求了,不过现在基本都Https了,Charles通过配置证书是可以在手机上抓Https请求的。原理就是通过电脑和手机都安装Charles的根证书并且授信,这样Charles可以作为中间人对App充当Server,对Server充当Client,Charles对数据也就透明化了。

  • 准备工作

    安装的Charles电脑和要抓包的手机连接到同一个WIFI。运行Charles,打开Proxy->Proxy settings,设置下端口:

SSL Proxying添加一个设置:

  • 手机代理设置

    手机连上和电脑同一个WIFI,需要手动设一下代理,Android手机在已连接WIFI的高级设置把代理设为手动代理,填上电脑的IP地址,用ifconfig | grep inet查看,和上一步设置的端口号8888

  • 安装根证书

电脑安装根证书,在Charles软件的help里点击SSL Proxying->Install Charles Certificate,然后在钥匙串里找到这个证书(可以搜索),双击,展开信任选项,选择始终信任:

手机安装根证书,同样在Help里选择Install mobile Certificate …按照提示操作就行了。

这样就可以查看HTTPS数据了:

应用外抓UDP

UDP包用Charles是不好抓的,着就需要用另外一个工具Wireshark,软件运行的界面需要选择一个要监听的网卡,然后用各种过滤条件来筛选要抓的包,这个工具用熟了对OSI参考模型也就很理解了。

参考

https://zhuanlan.zhihu.com/p/88032859

https://zhuanlan.zhihu.com/p/82498482