简介
Charles是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。
Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。
除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议
Charles 主要的功能包括:
截取 Http 和 Https 网络封包。
支持重发网络请求,方便后端调试。
支持修改网络请求参数。
支持网络请求的截获并动态修改。
支持模拟慢速网络。
Charles 主界面介绍
Charles 顶部为菜单导航栏,菜单导航栏下面为工具导航栏。视图如下图所示:
工具导航栏中提供了几种常用工具:
清除捕获到的所有请求
红点状态说明正在捕获请求,灰色状态说明目前没有捕获请求。
灰色状态说明是没有开启网速节流,绿色状态说明开启了网速节流。
灰色状态说明是没有开启断点,绿色状态说明开启了断点。
编辑修改请求,点击之后可以修改请求的内容。
重复发送请求,点击之后选中的请求会被再次发送。
验证选中的请求的响应。
常用功能,包含了 Tools 菜单中的常用功能。
常用设置,包含了 Proxy 菜单中的常用设置。
Charles 主要提供两种查看封包的视图,分别名为 Structure 和 Sequence。
Structure: 此视图将网络请求按访问的域名分类。
Sequence: 此视图将网络请求按访问的时间排序。
使用时可以根据具体的需要在这两种视图之前来回切换。请求多了有些时候会看不过来,Charles 提供了一个简单的 Filter 功能,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求。
Charles 菜单介绍
Charles 的主菜单包括:File、Edit、View、Proxy、Tools、Window、Help。用的最多的主菜单分别是 Proxy 和 Tools。
Proxy 菜单
Proxy 菜单包含以下功能:
Start/Stop Recording:开始/停止记录会话。
Start/Stop Throttling:开始/停止节流。
Enable/Disable Breakpoints:开启/关闭断点模式。
Recording Settings:记录会话设置。
Throttle Settings:节流设置。
Breakpoint Settings:断点设置。
Reverse Proxies Settings:反向代理设置。
Port Forwarding Settings:端口转发。
Windows Proxy:记录计算机上的所有请求。
Proxy Settings:代理设置。
SSL Proxying Settings:SSL 代理设置。
Access Control Settings:访问控制设置。
External Proxy Settings:外部代理设置。
Web Interface Settings:Web 界面设置。
Recording Settings(记录会话设置)
Recording Settings 和 Start/Stop Recording 配合使用,在 Start Recording 的状态下,可以通过 Recording Settings 配置 Charles 的会话记录行为。Recording Settings 的视图如下图所示:
Recording Settings 有 Options、Include、Exclude 三个选项卡:
Options:
通过 Recording Size Limits 限制记录数据的大小。
当 Charles 记录时,请求、响应头和响应体存储在内存中,或写入磁盘上的临时文件。
有时,内存中的数据量可能会变得太多,Charles 会通知您并停止录制。
在这种情况下,您应该清除 Charles 会话以释放内存,然后再次开始录制。
在录制设置中,您可以限制 Charles 将记录的最大大小; 这根本不会影响你的浏览,Charles 仅会停止录制。
Include:
只有与配置的地址匹配的请求才会被录制。
Exclude:
只有与配置的地址匹配的请求将不会被录制。
Include 和 Exclude 选项卡的操作相同,选择 Add,然后填入需要监控的Procotol、Host 和 Port等信息,这样就达到了过滤的目的。如下图所示:
还有一种方法就是在一个请求网址上右击选择 Focus,然后其他的请求就会被放到一个叫 Other Host 的分类里面,这样也达到了过滤的目的。
Throttle Settings(节流设置)
Throttle Settings 和 Start/Stop Throttling 配合使用,在 Start Throttling 的状态下,可以通过 Throttle Settings 配置 Charles 的网速模拟配置。Throttle Settings 的视图如下图所示:
勾选 Enable Throttling 启用网速模拟配置,在 Throttle Preset 下选择网络类型即可,具体设置可以根据实际情况自行设置。如果只想模拟指定网站的慢速网络,可以再勾选上图中的 Only for selected hosts 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。
Throttle Settings 视图中的选项含义如下:
Bandwidth:带宽
Utilistation:利用百分比
Round-trip:往返延迟
MTU:字节
Breakpoint Settings(断点设置)
Breakpoint Settings 和 Enable/Disable Breakpoints 配合使用,在 Enable Breakpoints 的状态下,可以通过 Breakpoint Settings 配置 Charles 的断点模式。Breakpoint Settings 的视图如下图所示:
勾选 Enable Breakpoints 启用断点模式,选择 Add,然后填入需要监控的Scheme、Procotol、Host 和 Port 等信息,这样就达到了设置断点的目的。然后可以来观察或者修改请求或者返回的内容,但是在这过程中需要注意请求的超时时间问题。或者可以在某个想要设置断点的请求网址上右击选择 Breakpoints 来设置断点。
Reverse Proxies Settings(反向代理设置)
反向代理在本地端口上创建 Web 服务器,该端口透明地将请求代理给远程 Web 服务器。反向代理上的所有请求和响应都可以记录在 Charles 中。
如果您的客户端应用程序不支持使用 HTTP 代理,或者您希望避免将其配置为使用代理,那么反向代理很有用。创建原始目标 Web 服务器的反向代理,然后将客户端应用程序连接到本地端口; 反向代理对客户端应用程序是透明的,使您可以查看 Charles 以前可能无法访问的流量。
有关反向代理的更多信息,请访问 Reverse proxy
Port Forwarding Settings(端口转发)
可以将任何 TCP/IP 或 UDP 端口配置为使用 Port Forwarding 工具从 Charles 转发到远程主机。这样可以调试 Charles 中的任何协议。
在 Macromedia Flash 中调试 XMLSocket 连接时,这尤其有用。
还可以使用 Charles 作为 SOCKS 代理,因此无需设置端口转发。
Windows Proxy(记录计算机上的所有请求)
如果想要抓取电脑端的请求,勾选 Windows Proxy 选项即可;如果只需要抓取手机请求,则取消勾选这个选项
Proxy Settings(代理设置)
Proxy Settings 的视图如下图所示:
代理端口默认为 8888(可以修改),并且勾上 Enable transparent HTTP proxying 就完成了在 Charles 上的代理设置。
SSL Proxy Settings(SSL 代理设置)
SSL Proxy Settings 的视图如下图所示
勾上 Enable SSL proxying 就完成了在 Charles 上的 SSL 代理设置。之后也可以选择 Add,然后填入需要监控的 Host 和 Port 信息,这样就达到了针对某个域名启用 SSL 代理的目的。
Access Control Settings(访问控制设置)
Access Control Settings 表示访问控制设置。访问控制列表确定谁可以使用此 Charles 实例。通常,您在自己的计算机上运行 Charles,并且您只打算自己使用它,因此 localhost 始终包含在访问控制列表中。也可以选择 Add,然后填入允许访问的 IP,这样就达到了允许某个 IP 访问 Charles 的目的。
External Proxy Settings(外部代理设置)
External Proxy Settings 表示外部代理设置。可能在网络上有一个代理服务器,必须使用该代理服务器才能访问 Internet。在这种情况下,需要将 Charles 配置为在尝试访问 Internet 时使用现有代理。
可以配置单独的代理地址和端口:
HTTP
HTTPS
SOCKS
如果您有 SOCKS 代理,Charles 将把它用于所有非 HTTP(S) 流量,例如端口转发。
Web Interface Settings(Web 界面设置)
Web Interface Settings 表示 Web 界面设置。Charles 有一个 Web 界面,可以让您从浏览器控制 Charles,或使用 Web 界面作为 Web 服务使用外部程序。
在 External Proxy Settings 视图中勾选 Enable the web interface 选项启用 Web 界面。可以允许匿名访问,也可以配置用户名和密码。还可以通过在配置使用 Charles 作为其代理的 Web 浏览器中访问 http://control.charles/ 来访问 Web 界面。
Web界面提供对以下功能的访问:
节流控制
激活或停用任何已配置的限制预设
录音控制
开始和停止会话录制
工具
激活和停用工具
会话控制
清除当前会话
以任何支持的格式导出当前会话
以 Charles 的本机会话格式下载当前会话
退出查尔斯
通过检查 Web 界面 HTML ,您可以推导出如何将其用作 Web 服务来自动化 Charles。
Tools 菜单
Charles 是一个 HTTP 和 SOCKS 代理服务器,所有的请求都会经过 Charles。下面主要介绍 Charles 提供的一些实用工具。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:发布要点设置。
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。
Charles 使用教程
通过 Charles 进行 PC 端抓包
Charles 会自动配置浏览器和工具的代理设置,所以说打开工具直接就已经是抓包状态了。只需要保证一下几点即可:
确保 Charles 处于 Start Recording 状态。
勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
通过 Charles 进行移动端抓包
手机抓包的原理,和 PC 类似,手机通过把网络委托给 Charles 进行代理与服务端进行对话。具体步骤如下:
使手机和电脑在一个局域网内,不一定非要是一个 IP 段,只要是在同一个路由器下即可。
电脑端配置:
关掉电脑端的防火墙(这点很重要)。
打开 Charles 的代理功能:通过主菜单打开 Proxy | Proxy Settings 弹窗,填入代理端口(端口默认为 8888,不用修改),勾选 Enable transparent HTTP proxying。
如果不需要抓取电脑上的请求,可以取消勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
手机端配置:
通过 Charles 的主菜单 Help | Local IP Address 或者通过命令行工具输入 ipconfig 查看本机的 IP 地址。
设置代理:打开手机端的 WIFI 代理设置,输入电脑 IP 和 Charles 的代理端口。
设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击 Allow 即可完成设置。
完成以上步骤,就可以进行抓包了。
通过 Charles 进行 HTTPS 抓包
HTTPS 的抓包需要在 HTTP 抓包基础上再进行设置。需要完成一下步骤:
完成 HTTP 抓包配置。
电脑端安装 Charles 证书:通过 Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate 安装证书。
设置 SSL 代理:通过主菜单打开 Proxy | SSL Proxy Settings 弹窗,勾选 Enable SSL proxying。
移动端安装 Charles 证书:通过 Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate on a Mobile Device or Remote Browser 安装证书。
设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击 Allow 即可完成设置。
完成以上步骤,就可以进行 HTTPS 抓包了。
Charles License
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
注册码来自于网络,注册码 Windows 和 Mac 通用。