charles使用笔记

记录使用charles的过程与遇到的一些坑。

准备工作

Charles 官方网站下载最新版的Charles安装包,是一个 dmg 后缀的文件。打开后将Charles拖到 Application 目录下即完成安装。本人版本是4.0.2

开始抓包

Charles设置成系统代理

之前提到,Charles 是通过将自己设置成代理服务器来完成封包截取的,所以使用Charles的第一步是将其设置成系统的代理服务器。

启动Charles后,第一次Charles会请求你给它设置系统代理的权限。你可以输入登录密码授予Charles该权限。你也可以忽略该请求,然后在需要将Charles设置成系统代理时,选择菜单中的 "Proxy" -> "Mac OS X Proxy" 来将Charles设置成系统代理。如下所示:

图1

之后,你就可以看到源源不断的网络请求出现在Charles的界面中。

需要注意的是,ChromeFirefox 浏览器默认并不使用系统的代理服务器设置,而Charles是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 ChromeFirefox 浏览器的网络通讯内容。如果你需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。

本人使用的XX-net代理,可在chrome下通过此插件设置系统代理

抓取手机数据包

Charles 通常用来截取本地网络封包,但是当我们需要时,我们也可以用来截取其它设备上的网络请求。下面我就以 iPhone 为例,讲解如何进行相应操作。

charles上的设置

要截取 iPhone 上的网络请求,我们首先需要将Charles的代理功能打开。在Charles的菜单栏上选择"Proxy"->"Proxy Settings",填入代理端口 8888,并且勾上 "Enable transparent HTTP proxying" 就完成了在Charles上的设置。如下图所示:

图2

手机上的设置

首先我们需要获取Charles运行所在电脑的IP地址,Charles的顶部菜单的 "Help"->"Local IP Address",即可在弹出的对话框中看到 IP 地址,如下图所示:

图3

iPhone"设置" -> "无线局域网" 中,可以看到当前连接的wifi名,通过点击右边的详情键,可以看到当前连接上的wifi的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有「HTTP 代理」一项,我们将其切换成手动,然后填上Charles运行所在的电脑的 IP,以及端口号 8888,如下图所示:

图4

设置好之后,我们打开iPhone上的任意需要网络通讯的程序,就可以看到Charles弹出iPhone请求连接的确认菜单(如下图所示),点击 "Allow" 即可完成设置。

图5

截取https

安装证书

如果你需要截取分析Https协议相关的内容。那么需要安装CharlesCA 证书。具体步骤如下。

首先我们需要在 Mac 电脑上安装证书。点击Charles的顶部菜单,选择 "Help" -> "SSL Proxying" -> "InstallCharlesRoot Certificate",然后输入系统的帐号密码,即可在 KeyChain 看到添加好的证书。如下图所示:

图6

电脑端

选择_图6_ 红框部分,然后需要对证书信任,之后会弹出钥匙串,如果不弹出,请自行打开钥匙串,如下图:

图7

双击证书,选择始终信任

图8

手机端

选择_图6_ 绿框部分,在手机上输入弹出框中的链接地址进行安装

图9

添加SSL Proxying

证书安装完毕后,还需要对SSL做以下处理:

  1. 进入"Proxy" -> "SSL Proxying Settings"
  2. 勾选"Enable SSL Proxying",并点击下方的Add
  3. 在弹出的"Edit Location"中,输入HostPort都为"*"(看提示这样配置可以抓到所有https的包),然后进行添加

以上设置完毕后就可以正常抓取数据了。

代理本地文件

我们在查找线上bug时,由于文件是压缩版或请求数据不可控,导致无法直接调试,此时一般会选择在本地环境模拟线上数据进行调试。

现在有了charles的Map Local功能,可以将线上文件代理成本地文件,达到修改本地文件,访问线上地址即可查看效果,步骤如下图:

点击查看大图

window中的Fiddler设置参考这篇文章

踩过的坑

电脑端无法抓包

问题原因:

确认两个代理设置是否正确,一是charles设置为系统代理:Mac OS X Proxy,二是浏览器也使用的系统代理

若以上确认无误。分析为本地开启了vpn等翻墙工具。

解决方法:

  1. 关闭vpn翻墙工具
  2. 打开wifi中的网络偏好设置->高级->代理->不勾选 自动代理配置
  3. 重启charles

手机上安装了证书,仍然无法抓包?

iphone系统更新到iOS 10.3后,https的请求都会失败,提示错误信息为Failure SSLHandshake: Received fatal alert: unknown_caYou may need to configure your browser or application to trust the Charles Root Certificate.

然而之前任何问题都没有,并且相关设置都正确:Mac上安装了Charles的根证书,并且设置了始终信任,然后手机上也登录了http://chls.pro/ssl安装了描述文件,一切都按正常程序走的,但是错误始终无法解决。

问题原因:

虽然charles的根证书已经在安装列表中显示,但它是被关闭的。在iOS 10.3之前,当你将安装一个自定义证书,iOS会默认信任,不需要进一步的设置。而iOS 10.3之后,安装新的自定义证书默认是不受信任的。如果要信任已安装的自定义证书,需要手动打开开关以信任证书。

解决方法:

设置->通用->关于本机->证书信任设置->找到charles proxy custom root certificate然后信任该证书即可。

参考

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 FE blog All Rights Reserved.

访客数 : | 访问量 :