Charles是一款常用的网络封包截取工具,在测试与服务器端的网络通讯时,常常需要截取网络封包来分析。Charles通过将自己设置成系统的网络访问代理服务器,所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
一.Charles的下载安装
(1)下载地址:https://www.charlesproxy.com/download/
(2)注册账号(任意版本的Charles都可用)
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
二.Charles的基本功能介绍
1:主界面
2:菜单
Charles 的主菜单包括:File、Edit、View、Proxy、Tools、Window、Help。用的最多的主菜单分别是 Proxy 和 Tools。
(1) Proxy菜单
Proxy 菜单包含以下功能:
Start/Stop Recording:开始/停止记录会话。
Start/Stop Throttling:开始/停止节流。
Enable/Disable Breakpoints:开启/关闭断点模式。
Recording Settings:记录会话设置。
Throttle Settings:模拟网速设置。
Breakpoint Settings:断点设置。
Reverse Proxies Settings:反向代理设置。
Port Forwarding Settings:端口转发。
MacOS Proxy:记录计算机上的所有请求。
Proxy Settings:代理设置。
SSL Proxying Settings:SSL 代理设置。
Access Control Settings:访问控制设置。
External Proxy Settings:外部代理设置。
Web Interface Settings:Web 界面设置。
(2)Tools菜单
Tools 菜单包含以下功能:
No Caching Settings:禁用缓存设置。
Block Cookies Settings:禁用 Cookie设置。
Map Remote Settings:远程映射设置。
Map Local Settings:本地映射设置。
Rewrite Settings:重写设置。
Black List Settings:黑名单设置。
White List Settings:白名单设置。
DNS Spoofing Settings:DNS 欺骗设置。
Mirror Settings:镜像设置。
Auto Save Settings:自动保存设置。
Client Process Settings:客户端进程设置。
Compose:编辑修改。
Repeat:重复发包。
Repeat Advanced:高级重复发包。
Validate:验证。
Publish Gist:发布要点。
Import/Export Settings:导入/导出设置。
Profiles:配置文件。
Publish Gist Settings:发布要点设置。
在后续的内容中会介绍常用的功能。
三.Charles的基本功能
(1)Session
Session有两种展示结构:structure和sequence
Structure:按照不同hosts域名分组展示请求(如下图3.1):
图3.1
Sequence:按照请求顺序来展示请求(如下图3.2):
图3.2
如果请求太多看起来比较麻烦,Charles有一个Filter功能,可以输入关键字来快速筛选出URL中带有关键字的网络请求。
(2)使用Structure结构在session上右键查看支持的功能:
① Repeat、Repeat Advanced…:重复执行请求,Repeat Advanced可以指定重复的遍数。这样可以选中多会话,在右侧的chart查看请求的时间等性能
② Focus:在某个域名下点击Focus,会将当前域名放到顶部,没有Focus的域名统一放到下面的Other Hosts下(可以在View->Focused Hosts中统一编辑)
③ 黑白名单(可以在Toos->Black List/Write List下统一更改)
Black List:黑名单中的域名不能联网
Write List:白名单开启后,只有白名单中的网络可以访问网络,不在白名单中的不能访问网络
(如果一个域名既在Black List中也在Write List中,则也不能访问网络)
④ Export:导出会话Session保存到本地,然后下次可以通过File->Open Session打开本地的Session
⑤ Compare:左侧列表选择两个Session,右键时会出现该项,可以比对两个请求的入参和出参
⑥ Compose:即工具栏上的钢笔的图标,编辑请求然后执行
四.手机通过Charles抓取https包
(1)配置Charles,允许抓取https的包
① :Proxy->SSL Proxying Settings…,勾选Enable SSL Proxying,Add一个locations,通过通配符* 抓取所有域名的https。
Host可以使用通配符或?进行匹配,如果想抓取所有域名的,直接用即可(Add一个新的Location,然后直接点OK就创建了),如果特定想抓取某个域名的,可以直接在Host那里写具体Host。
② :Charles设置Port值,Charles按照下图方式配置Port
路径:Proxy->Proxy Settings…
(2)手机端配置PC代理
① 在手机的WIFI设置里,修改网络,手动添加代理
代理服务器主机名:使用PC的本机IP地址(help-Local IP Address可查到)
代理服务器端口:使用上一步设置的Port值
② 第一次配置完代理,需要在PC端进行允许操作,详见下图的Allow(如果不小心关了下面的弹框,可以重新配置一下手机代理或在Charles里手动添加)
Charles里添加允许访问的IP的方法:
③ PC端Charles安装https证书
Help->SSL Proxying ->Install Charles Root Certificate,然后在钥匙串中信任证书即可
④ 手机端下载Charles的证书(两种方式)
1:根据Help->SSL Proxying ->Install Charles Root Certificate on Mobile Device or Remote Browser…获得下载证书的地址,操作如下图:
将下载到PC端证书放到手机中,在设置中信任即可。
2:手机浏览器打开此网址下载证书:chls.pro/ssl
特殊机型说明如下:
A:小米安装比较特殊,需要在设置->其他高级设置->安全和隐私->凭据存储->从存储设备安装->选择下载的证书安装
B:ios10以上系统,需要在设置->通用->关于本机,信任安装的证书
证书安装好了之后就可以抓包了
抓取包注意事项:如果要抓取Safari等浏览器的包,必须勾选Proxy->macOS Proxy,否则没进行抓包
五.模拟请求做mock,使用断点,Map和Rewrite
(1)验证server端的请求和结果
直接选中请求,点击控制栏上的编辑,然后修改请求后执行。
(2)APP或者PC端等待server的数据返回
这种可以使用打断点的方式,或者通过Map Remote /Map Local重定向来获得结果。
① 打断点
Session上右键选择Breakpoints,或者通过顶部工具栏的Proxy->Breakpoints Settings来编辑断点的请求,需要点开导航栏上的开启断点(Disable Breakpoints)才可以生效断点
添加断点后的内容如下图所示:
当再有符合断点规则(Host、Path、Query)的请求过来时,会自动进入断点页面,断点分为两部分:
1:请求发到服务器前,此时可以修改request的入参等信息
2:服务器返回的数据返回给终端(APP或PC)之前,此时可以修改response的内容
② 通过Map Remote:是将某个网络请求重定向到另一个网络请求
可以在Session上右键Map Remote设定规则,或Tools->Map Remote来管理所有Map Remote(勾选Enable Map Remote才会启用)
请求可以使用通配符*等来匹配,Map To可以是一个接口请求,可以是一个远程文件(js或html文件等)
③ 使用Map Local:使用本地一个文件的内容作为返回值
可以在Session上右键Map Local设定规则,或Tools->Map Local来管理所有Map Local(勾选Enable Map Local才会启用)
④ mock的方法,Rewrite
在Tools->Rewrite中添加规则,Enable Rewrite勾选才会去走重写
Rewrite:可以添加规则修改请求的header、参数等各种信息,比Map更灵活,而且针对同一个请求可以添加多个规则,但如果出问题不容易调试
比如下面的例子,添加了一个叫做测试的规则,右侧Location上面添加要匹配的请求,下面填写重写规则(右面的弹框,Type可以选择 header rules, URL rules, query parameter rules, and body rules)
(3)指定Hosts
有时候要把域名指向某一个固定的IP地址,除了修改PC本机的hosts文件外,也可以在Charles中设置
Tools->DNS Spoofing Settings中设置hosts
六.模拟网速
有时测试需要限制网速,在Proxy->Throttle Settings中配置,然后再Proxy->Strat Throttling或工具栏上小乌龟的图标开启或停止限流
勾选 Enable Throttling 启用网速模拟配置,在 Throttle Preset 下选择网络类型即可,具体设置可以根据实际情况自行设置。如果只想模拟指定网站的慢速网络,可以再勾选上图中的 Only for selected hosts 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。
Throttle Settings 视图中的选项含义如下:
Bandwidth:带宽
Utilistation:利用百分比
Round-trip:往返延迟
MTU:字节