为什么使用 charles
- 截取 Http 和 Https 网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络。
原理
Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
使用教程
安装
PC 端抓包
Charles 会自动配置浏览器和工具的代理设置,所以说打开工具直接就已经是抓包状态了。只需要保证以下几点即可:
- 确保 Charles 处于 Start Recording 状态
- 勾选 Proxy | Windows Proxy 或 Proxy | mac Os Proxy;如果不需要抓取电脑上的请求取消勾选即可
移动端抓包
手机抓包的原理,和 PC 类似,手机通过把网络委托给 Charles 进行代理与服务端进行对话。具体步骤如下
-
确保手机和电脑在一个局域网内
-
打开 Charles 的代理功能:通过主菜单打开 Proxy | Proxy Settings 弹窗,填入代理端口(端口默认为
8888,不用修改),勾选Enable transparent HTTP proxying -
获取电脑的ip地址: Charles 的主菜单 Help | Local IP Address
-
打开手机端的wifi设置,输入电脑 IP 和 Charles 的代理端口
-
设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击 Allow 即可完成设置
-
电脑端安装 Charles 证书:Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate 安装证书。
-
设置 SSL 代理:通过主菜单打开 Proxy | SSL Proxy Settings 弹窗,勾选
Enable SSL proxying。host 和 port 都设置为*即可 -
手机安装 Charles 证书:
Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate on a Mobile Device or Remote Browser
手机流浏览器(推荐使用UC浏览器)里面输入 chls.pro/ssl 下载证书;若下载不了可以 pc 上访问下载之后传到手机上;下载成功会会有提示安装,安装成功后在证书里面信任一下
完成以上步骤,就可以进行在手机上抓包了。
Android 专区
Android 6.0(API 级别 23)以上,Google 更改了安全策略,用户添加的 CA 证书不能再用于安全连接,无法使用用户自定义的证书抓包
解决方案
Charles 的证书安装为系统证书
-
确保手机已经处于 root
-
计算证书文件的 hash 值 openssl x509 -subject_hash_old -in <Certificate_File>
-
重命名证书的名字为 <Certificate_Hash>. Number 只是区分重名的情况,默认为 0 就好
-
将重命名好的证书 push 到/system/etc/security/cacerts/ 若执行失败需要依次执行以下命令
adb root
adb disable-verity
adb reboot
adb remount
adb shell
mount -o rw,remount /system
- 复制好后将文件权限更改为 644,并重启设备
chmod 644 <Certificate_Hash>.
reboot
-
查看系统证书;可以看到charles证书已成为系统证书
FAQ
-
ios上在证书没问题的情况下依然网络连接是unkown
-
检查一下charles的设置是否开启ssl
-
电脑的wifi删掉重新连接
常用功能
Throttle Settings(节流设置)
Throttle Settings 和 Start/Stop Throttling 配合使用,在 Start Throttling 的状态下,可以通过 Throttle Settings 配置 Charles 的网速模拟配置。Throttle Settings 的视图如下图所示;
勾选 Enable Throttling 启用网速模拟配置,在 Throttle Preset 下选择网络类型即可,具体设置可以根据实际情况自行设置。如果只想模拟指定网站的慢速网络,可以再勾选上图中的 Only for selected hosts 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可
Breakpoint Settings(断点设置)
Breakpoint Settings 和 Enable/Disable Breakpoints 配合使用,在 Enable Breakpoints 的状态下,可以通过 Breakpoint Settings 配置 Charles 的断点模式。Breakpoint Settings 的视图如下图所示:
勾选 Enable Breakpoints 启用断点模式,选择 Add,然后填入需要监控的 Scheme、Procotol、Host 和 Port 等信息,这样就达到了设置断点的目的。然后可以来观察或者修改请求或者返回的内容,但是在这过程中需要注意请求的超时时间问题。或者可以在某个想要设置断点的请求网址上右击选择 Breakpoints 来设置断点。
No Caching Settings(禁用缓存)
No Caching 工具可防止客户端应用程序(如 Web 浏览器)缓存任何资源。因此,始终向远程网站发出请求,您始终可以看到最新版本。
该工具可以作用于每个请求(选中 Enable No Caching 即可),也可以仅对你配置的请求启用(启用 No Caching 的同时,请选中 Only for selected locations)。当用于选定的请求时,可以使用简单但功能强大的模式匹配将工具的效果限制为指定的主机和路径。
原理:No Caching 工具通过操纵控制响应缓存的 HTTP 请求头来防止缓存。从请求中删除 If-Modified-Since 和 If-None-Match 请求头,添加 Pragma:no-cache 和 Cache-control:no-cache。从响应中删除 Expires,Last-Modified 和 ETag 请求头,添加 Expires:0 和 Cache-Control:no-cache。
Map Remote Settings(远程映射)
Map Remote 工具根据配置的映射更改请求站点,以便从新站点透明地提供响应,就好像这是原始请求一样。
Rewrite Settings(重写)
Rewrite 工具允许创建请求和响应在通过 Charles 时修改他们的规则。如:添加或更改头信息、搜索和替换响应内容中的某些文本等。