投稿部门公众号,做了一些微调,增加了 Android 机型的一些说明。

2018-03-01 Beanlee

相信各位在移动端开发过程中一定遇到抓取数据包、拦截请求的场景,本文主要介绍移动端在针对 HTTPS 抓包时的几款软件的配置(包括CharlesFiddlerWhistle),下面举例将已 iOS 11 为例,附带 Android 机型配置截图。

Charles

  • 官网
  • 按照 license 收费,收费后终身享受升级,仅限 OS X 平台

HTTP 抓包配置

1.确保手机与主机处于同一局域网内。

查看本机 IP,使用 ifconfig 命令查看本机 IP;或者打开系统设置查看 IP 如截图;

例如:当前本机 IP 192.168.191.4

ifconfig

wifi-config

2.设置手机 iOS 网络代理

设置 -> 无线局域网 -> HTTP 代理 -> 手动

服务器:192.168.191.4 端口:8888

ios&andoird-proxy-conf

3.配置完成后,在手机端访问任何一个 App 或网页,电脑端 Charles 会弹出提示,点击 Allow

此时可以在应用的界面中看到 HTTP 的请求数据了。

接下来继续 HTTPS 的配置。

HTTPS 抓包配置

1.信任证书 本机

打开 Charles 后如下图操作,电脑端信任证书,注意 此处选择system

charles-install-root-cer

charles-install-root-cer-system

2.信任证书 手机

打开 Safari 地址输入 192.168.191.4:8888chls.pro/ssl 点击安装,此时会弹出要求需要输入手机密码,完成后证书安装成功。

此时查看 通用 -> 描述文件 中 charles proxy ca 已变成已验证

注意 自 iOS 10.3 以上,还需要多一步操作,手动信任自定义根证书,才能确保证书安装并已启用;

关于本机 -> 证书信任设置 启用 charles proxy ca 截图详见文章底部锦囊

注意 Android 手机不需要安装 Charles 证书 ssl-certificates

下面截图中是 Android 仅安装了 Fiddler 和 Whistle 的证书截图。

android-cert

3. Charles 设置启用 SSL Proxy

Proxy->SSL Proxy setting Enabled SSL Proxying

同时添加希望拦截到的域名,例如:*.jd.com 端口 443

charles-ssl-config01

charles-ssl-config02

配置完成 : )

Fiddler

  • 官网
  • 微软出品,免费,由于需要 .Net 库仅 Windows 平台(也有一些 Fiddler For mac / linux 但仅限 beta 版且功能不完善,这里只推荐在 Win 平台使用)

HTTP 抓包

配置与 Charles 配置相同端口略有不同,此处不再重复。

总结几大步骤:

  1. 移动端和电脑同处同一局域网内
  2. 手机或移动设备设置网络代理对应电脑端 IP 和 端口

fiddler01

HTTPS 抓包配置

  • 勾选拦截 HTTPS 请求
  • 安装证书(电脑端 & 手机端)

fiddler02

Whistle

  • 官网
  • 国人开发,开源 MIT 协议,基于 NodeJS 跨平台
  • 推荐 功能强大,部门内也有小伙伴分享过一次使用经验

工具准备

  • nodejs v0.10.0+
  • npm i -g whistle
  • w2 start

完成上面几步操作后,此时 8899 端口已经常驻后台。

界面

whistle

Chrome 插件

whistle 提供了一个基于 Chrome 的插件,可以方便切换代理,查看网络,编辑规则等,不过很遗憾作者已经将插件在 Web Store 下架,现在搜索不到,我把本地 0.10.0 版本打包成 crx 上传在 Google Driver 可以访问 下载

或者改用另外一个强大的插件 Proxy SwitchyOmega 该插件也拥有强大的代理功能,同时支持自定义规则,可以自动根据域名或端口等自动选择是否启用代理,以后有机会可以分享使用 Proxy SwitchOmega 的使用经验。

HTTPS 拦截配置

whistle 文档 https 设置部分

HTTPS 抓包锦囊

注意 自 iOS 10.3 以后,无论使用上面哪一种工具抓包,安装完 ca 证书以后,还需要多一步操作,才能确保证书安装并已启用;

通用 -> 关于本机 -> 证书信任设置 -> 启用相对应的证书,就可以看到工具中抓取到相应的 HTTPS 请求。

ios-cer

这一点跟苹果的 one more thing 貌似有那么一点不谋而合。

注意 Android 部分手机(如小米、华为)无法安装证书时候,不妨试试在电脑端将证书导出,打开手机 FTP 或者利用数据线传输到手机某个文件夹,点开 WLAN 配置 -> 高级设置 -> 安装证书 选择对应的证书安装即可。亦或是因为权限问题无法安装,打开安全隐私,选择信任 未知来源

此办法对于安装测试版 APP 也管用 :)

have fun :D