器→工具, 工具软件

HTTP抓包工具之Charles

钱魏Way · · 737 次浏览

Charles简介

Charles是一个HTTP代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request, response和HTTP headers (包含cookies与caching信息)。

Charles主要功能:

  • 支持SSL代理。可以截取分析SSL的请求。
  • 支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。
  • 支持AJAX调试。可以自动将json或xml数据格式化,方便查看。
  • 支持AMF调试。可以将Flash Remoting 或 Flex Remoting信息格式化,方便查看。
  • 支持重发网络请求,方便后端调试。
  • 支持修改网络请求参数。
  • 支持网络请求的截获并动态修改。
  • 检查HTML,CSS和RSS内容是否符合W3C标准。

以上介绍了Charles的主要功能,个人在使用过程中主要用的是抓取HTTP和HTTPS请求。特别是HTTPS的请求,抓取起来还是有一些麻烦,特此记录。

Charles 抓包原理

市面上绝大多数的抓包软件,背后的原理都是中间人攻击(Man-in-the-middle attack,缩写:MITM)。

维基百科是这样定义 MITM 的:中间人攻击在密码学和计算机安全领域中是指攻击者与通讯的两端分别建立独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。

上面的定义写的很清晰,下图中结合箭头方向就能看懂 HTTP Packets 的流向:

Charles的使用

Charles的安装过程是比较简单,只需到官网下载安装即可。比较困难的是HTTPS请求的配置。

Windows下HTTPS请求抓包

1、配置SSL支持。点击【Proxy】–>【SSL Proxying Settings…】,在弹出选项卡中,勾选【Enable SSL Proxying】点击【add】,在Host输入【*】表示接收任何主机,在Prot输入【*】表示任何端口,最后点击【ok】保存。

2、安装证书。点击【Help】–>【SSL Proxying】–>【Install Charles Root Certificate】,按照引导流程安装证书。

完成后打开IE进行测试:出现证书错误!

打开Chrome测试:

打开Edge测试:

都被安全拦截了,装了证书都不起作用。

解决方案:安装Firefox!

安装完毕后在开启Charles时,使用Firefox打开,http://chls.pro/ssl,弹出如下页面:

选择保存文件后按确定。文件默认保存到下载文件夹。

打开Firefox【设置】–>【隐私与安全】–>【证书】–>【查看证书】

使用【证书管理器】–>【证书办法机构】–>【导入】进行导入操作。

iOS下HTTPS请求抓包

在PC上开启共享网络。将手机连接到PC共享的WIFI上。

在手机上设置代理地址,代理IP为PC的IP,端口为Charles的端口。

在手机自带浏览器Safari中输入chls.pro,完成后需要进入【设置】安装描述文件。安装完毕后,如果是iOS 10 以后需要进入【设置】–>【通用】–>【关于本机】–>【证书信任设置】,开启证书。

Android下HTTPS请求抓包

在PC上开启共享网络。将手机连接到PC共享的WIFI上。

在手机上设置代理地址,代理IP为PC的IP,端口为Charles的端口。

在手机默认浏览器中输入chls.pro,下载downloadfile.crt文件,然后在【我的下载】中进行打开,按引导进行安装。

备注:类似小米,下载时需要关闭“使用迅雷引擎下载”,否则会下载失败。

Charles的高级应用

过滤网络请求

通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,以下几种办法:

  • 方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:https://www.biaodianfu.com , 那么只需要在 Filter 栏中填入 biaodianfu即可。
  • 方法二:在 Charles 的菜单栏选择 “Proxy”->”Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了
  • 方法三:在想过滤的网络请求上右击,选择 “Focus”,之后在 Filter 一栏勾选上 Focussed 一项,这种方式可以临时性的,快速地过滤出一些没有通过关键字的一类网络请求。

模拟慢速网络

在做移动开发的时候,我们常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。Charles 对此需求提供了很好的支持。

在 Charles 的菜单上,选择 “Proxy”->”Throttle Setting” 项,在之后弹出的对话框中,我们可以勾选上 “Enable Throttling”,并且可以设置 Throttle Preset 的类型。

如果我们只想模拟指定网站的慢速网络,可以再勾选上图中的 “Only for selected hosts” 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。

修改网络请求内容

有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。只需要在以往的网络请求上点击右键,选择 “Edit”,即可创建一个可编辑的网络请求。

我们可以修改该请求的任何信息,包括 URL 地址、端口、参数等,之后点击 “Execute” 即可发送该修改后的网络请求(如下图所示)。Charles 支持我们多次修改和发送该请求,这对于我们和服务器端调试接口非常方便。

给服务器做压力测试

我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下:

在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项。

在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。

修改服务器返回内容

有些时候我们想让服务器返回一些指定的内容,方便我们调试一些特殊情况。例如列表页面为空的情况,数据异常的情况,部分耗时的网络请求超时的情况等。如果没有 Charles,要服务器配合构造相应的数据显得会比较麻烦。这个时候,使用 Charles 相关的功能就可以满足我们的需求。

根据具体的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以达到修改服务器返回内容的目的。这三者在功能上的差异是:

  • Map 功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。
  • Rewrite 功能适合对网络请求进行一些正则替换。
  • Breakpoints 功能适合做一些临时性的修改。

Map 功能

Charles 的 Map 功能分 Map Remote 和 Map Local 两种,顾名思义,Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件。

在 Charles 的菜单中,选择 “Tools”->”Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面。

  • 对于 Map Remote 功能,我们需要分别填写网络重定向的源地址和目的地址,对于不需要限制的条件,可以留空。
  • 对于 Map Local 功能,我们需要填写的重定向的源地址和本地的目标文件。对于有一些复杂的网络请求结果,我们可以先使用 Charles 提供的 “Save Response…” 功能,将请求结果保存到本地,然后稍加修改,成为我们的目标映射文件。

Rewrite 功能

Rewrite 功能功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。

Breakpoints 功能

上面提供的 Rewrite 功能最适合做批量和长期的替换,但是很多时候,我们只是想临时修改一次网络请求结果,这个时候,使用 Rewrite 功能虽然也可以达到目的,但是过于麻烦,对于临时性的修改,我们最好使用 Breakpoints 功能。

需要注意的是,使用 Breakpoints 功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注