Charles 抓包

Charles 简介

Charles 是在 PC 端常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。

Charles 通过将自己设置成系统的网络访问,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。

Charles 主要的功能包括:

  • 截取 Http 和 Https 网络封包。
  • 支持重发网络请求,方便后端调试。
  • 支持修改网络请求参数。
  • 支持网络请求的截获并动态修改。
  • 支持模拟慢速网络。

下载安装 Charles

Charles 支持的操作系统包括:

  • Windows 64 bit(msi)
  • Windows 32 bit(msi)
  • macOS(dmg)
  • Linux 64 bit(tar.gz)
  • Linux 32 bit(tar.gz)

打开浏览器访问 Charles 官网 ,下载相应系统的 Charles 安装包,然后安装即可:

  • Windows: 运行安装应用程序以在程序菜单中安装 Charles。
  • Mac OS X: 通过双击解压缩下载文件,然后将 Charles 应用程序复制到 Applications 目录中。
  • Linux: Charles 拥有 APT存储库,如果你有基于 Debian 或基于 Red Hat 的 Linux 发行版,这是安装 Charles 的首选方法。否则,将 tar.gz 文件解压缩到适当的站点。如果您以前安装过 Charles 并且正在进行升级;首先确保 Charles 没有运行,然后安装或复制在以前安上。通过运行 bin/charles 脚本启动 Charles。

或者使用:

Charles 主界面介绍

Charles 的主界面视图如下图所示:
image
工具导航栏中提供了几种常用工具:
从左到右分别代表

  1. 清除捕获到的所有请求
  2. 红点状态说明正在捕获请求,灰色状态说明目前没有捕获请求。
  3. 上锁说明开启了SSL Proxying,打开锁说明没有开启SSL Proxying。
  4. 绿色状态说明开启了网速节流,灰色状态说明是没有开启网速节流。
  5. 红色状态说明开启了断点,灰色状态说明是没有开启断点。
  6. 编辑修改请求,点击之后可以修改请求的内容。
  7. 重复发送请求,点击之后选中的请求会被再次发送。
  8. 验证选中的请求的响应。
  9. 常用功能,包含了 Tools 菜单中的常用功能。
  10. 常用设置,包含了 Proxy 菜单中的常用设置。

Charles视图、Filter

Charles 主要提供两种查看封包的视图,分别名为 Structure 和 Sequence。

Structure: 此视图将网络请求按访问的域名分类。

Sequence:此视图将网络请求按访问的时间排序。

使用时可以根据具体的需要在这两种视图之前来回切换。请求多了有些时候会看不过来,Charles 提供了一个简单的 Filter 功能,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求。

对于某一个具体的网络请求,你可以查看其详细的请求内容和响应内容。如果请求内容是 POST 的表单,Charles 会自动帮你将表单进行分项显示。如果响应内容是 JSON 格式的,那么 Charles 可以自动帮你将 JSON 内容格式化,方便你查看。如果响应内容是图片,那么 Charles 可以显示出图片的预览。

image-1651374068490
Charles 菜单介绍
Charles 的主菜单包括:File、Edit、View、Proxy、Tools、Window、Help。用的最多的主菜单分别是 Proxy 和 Tools。

Proxy 菜单

Charles 是一个 HTTP 和 SOCKS 代理服务器。代理请求和响应使 Charles 能够在请求从客户端传递到服务器时检查和更改请求,以及从服务器传递到客户端时的响应。下面主要介绍 Charles 提供的一些代理功能。Proxy 菜单的视图如下图所示:
image-1651374711977
Proxy 菜单包含以下功能:

  • Start/Stop Recording:开始/停止记录会话。
  • Start/Stop SSL Proxying:开始/停止SSL代理。
  • Start/Stop Throttling:开始/停止节流。
  • Enable/Disable Breakpoints:开启/关闭断点模式。
  • Recording Settings:记录会话设置。
  • SSL Proxying Settings:SSL代理设置。
  • Throttle Settings:节流设置。
  • Breakpoint Settings:断点设置。
  • Reverse Proxies Settings:反向代理设置。
  • Port Forwarding Settings:端口转发设置。
  • macOS Proxy:记录计算机上的所有请求。
  • Proxy Settings:代理设置。
  • Access Control Settings:访问控制设置。
  • External Proxy Settings:外部代理设置。
  • Web Interface Settings:Web 界面设置。

Recording Settings(记录会话设置)

Recording Settings 和 Start/Stop Recording 配合使用,在 Start Recording 的状态下,可以通过 Recording Settings 配置 Charles 的会话记录行为。Recording Settings 的视图如下图所示:
image-1651383710295
Recording Settings 有 Options、Include、Exclude 三个选项卡:

Options:通过 Recording Size Limits 限制记录数据的大小。当 Charles 记录时,请求、响应头和响应体存储在内存中,或写入磁盘上的临时文件。有时,内存中的数据量可能会变得太多,Charles 会通知您并停止录制。在这种情况下,您应该清除 Charles 会话以释放内存,然后再次开始录制。在录制设置中,您可以限制 Charles 将记录的最大大小; 这根本不会影响你的浏览,Charles 仅会停止录制。
Include:与配置的地址匹配的请求才会被录制。
Exclude:与配置的地址匹配的请求将不会被录制。
Include 和 Exclude 选项卡的操作相同,选择 Add,然后填入需要监控的Procotol、Host 和 Port等信息,这样就达到了过滤的目的。如下图所示:
image-1651383854084
还有一种方法就是在一个请求网址上右击选择 Focus,然后其他的请求就会被放到一个叫 Other Host 的分类里面,这样也达到了过滤的目的。
image-1651383981498

Throttle Settings(节流设置)

Throttle Settings 和 Start/Stop Throttling 配合使用,在 Start Throttling 的状态下,可以通过 Throttle Settings 配置 Charles 的网速模拟配置。Throttle Settings 的视图如下图所示:
image-1651384507154
勾选 Enable Throttling 启用网速模拟配置,在 Throttle Preset 下选择网络类型即可,具体设置可以根据实际情况自行设置。如果只想模拟指定网站的慢速网络,可以再勾选上图中的 Only for selected hosts 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。

Throttle Settings 视图中的选项含义如下:

Bandwidth(kbps):带宽
Utilistation(%):利用百分比
Round-trip latency(ms):往返延迟
MTU(bytes):字节
Reliability(%): 可靠性
Stability(%): 稳定性
Unstable quality range(%): 不稳定的质量范围

快捷使用:选中小乌龟就是使用节流弱网,不选中就是关闭

Breakpoint Settings(断点设置)

Breakpoint Settings 和 Enable/Disable Breakpoints 配合使用,在 Enable Breakpoints 的状态下,可以通过 Breakpoint Settings 配置 Charles 的断点模式。Breakpoint Settings 的视图如下图所示:
image-1651385254580
勾选 Enable Breakpoints 启用断点模式,选择 Add,然后填入需要监控的Scheme、Procotol、Host 和 Port 等信息,这样就达到了设置断点的目的。然后可以来观察或者修改请求或者返回的内容,但是在这过程中需要注意请求的超时时间问题。或者可以在某个想要设置断点的请求网址上右击选择 Breakpoints 来设置断点。
image-1651385522592

Reverse Proxies Settings(反向代理设置)

反向代理在本地端口上创建 Web 服务器,该端口透明地将请求代理给远程 Web 服务器。反向代理上的所有请求和响应都可以记录在 Charles 中。
如果您的客户端应用程序不支持使用 HTTP 代理,或者您希望避免将其配置为使用代理,那么反向代理很有用。创建原始目标 Web 服务器的反向代理,然后将客户端应用程序连接到本地端口; 反向代理对客户端应用程序是透明的,使您可以查看 Charles 以前可能无法访问的流量。

Port Forwarding Settings(端口转发)

可以将任何 TCP/IP 或 UDP 端口配置为使用 Port Forwarding 工具从 Charles 转发到远程主机。这样可以调试 Charles 中的任何协议。
在 Macromedia Flash 中调试 XMLSocket 连接时,这尤其有用。

还可以使用 Charles 作为 SOCKS 代理,因此无需设置端口转发。
macOS Proxy(记录计算机上的所有请求)
如果想要抓取电脑端的请求,勾选 macOS Proxy 选项即可;如果只需要抓取手机请求,则取消勾选这个选项。

Proxy Settings(代理设置)

Proxy Settings 的视图如下图所示:
image-1651385726130
代理端口默认为 8888(可以修改),并且勾上 Enable transparent HTTP proxying 就完成了在 Charles 上的代理设置。

SSL Proxy Settings(SSL 代理设置)

SSL Proxy Settings 的视图如下图所示:
image-1651385890075

Tools 菜单

Charles 是一个 HTTP 和 SOCKS 代理服务器,所有的请求都会经过 Charles。下面主要介绍 Charles 提供的一些实用工具。Tools 菜单的视图如下图所示:
image-1651385926015

Tools 菜单包含以下功能:

  • No Caching Settings:禁用缓存设置。
  • Block Cookies Settings:禁用 Cookie设置。
  • Map Remote Settings:远程映射设置。
  • Map Local Settings:本地映射设置。
  • Rewrite Settings:重写设置。
  • Block List Settings:黑名单设置。
  • Allow List Settings:白名单设置。
  • DNS Spoofing Settings:DNS 欺骗设置。
  • Mirror Settings:镜像设置。
  • Auto Save Settings:自动保存设置。
  • Client Process Settings:客户端进程设置。
  • Compose:编辑修改。
  • Compose new request:编辑修改。
  • 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。

Block Cookies Settings(禁用 Cookie)

Block Cookies 工具阻止了 Cookie 的发送和接收。它可用于测试网站,就像在浏览器中禁用了 Cookie 一样。 请注意,网络爬虫(例如 Google)通常不支持 Cookie,因此该工具还可用于模拟网络爬虫网站的视图。

Map Remote Settings(远程映射)

Map Remote 工具根据配置的映射更改请求站点,以便从新站点透明地提供响应,就好像这是原始请求一样。

Map Local Settings(本地映射)

Map Local 工具使您可以使用本地文件,就像它们是远程网站的一部分一样。您可以在本地开发文件,并像在线上一样测试它们。本地文件的内容将返回给客户端,就像它是正常的远程响应一样。

Map Local 可以大大加快开发和测试速度,否则您必须将文件上传到网站以测试结果。使用 Map Local,您可以在开发环境中安全地进行测试。

Rewrite Settings(重写)

允许创建请求和响应在通过 Charles 时修改他们的规则。如:添加或更改头信息、搜索和替换响应内容中的某些文本等。

Block List Settings(黑名单)

Block List 工具允许输入应该被阻止的域名。当 Web 浏览器尝试从被列入黑名单的域名请求任何页面时,该请求将被 Charles 阻止。您还可以输入通配符来阻止其子域名。

Allow List Settings(白名单)

Allow List 工具允许输入仅仅被允许的域名。Allow List 工具将阻止除被列入白名单的域名之外的所有请求。

DNS Spoofing Settings(DNS 欺骗)

DNS Spoofing 工具允许通过将自己的主机名指定给远程地址映射来欺骗 DNS 查找。 当请求通过 Charles 时,您的 DNS 映射将优先。

Mirror Settings(镜像)

Mirror 工具会在浏览指定站点时,把接收到的响应内容克隆一份,并保存在磁盘上指定的路径下。

Auto Save Settings(自动保存)

Auto Save 工具会按设定的时间间隔自动保存和清除记录会话。
如果您让 Charles 长时间监控网络活动,并希望将记录分解为可管理的单元,或者避免因数据量过大而可能出现的内存不足情况,这将非常有用。

输入以分钟为单位的保存间隔以及保存会话文件的目录。您可以选择是否在每次运行 Charles 时启动 Auto Save 工具,否则在 Charles 启动时将始终禁用 Auto Save 工具。

会话文件的名称中保存时间戳,格式为 yyyyMMddHHmm,即年月日时分,以便按字母顺序排序时,它们以正确的顺序显示。

Client Process Settings(客户端进程)

Client Process 工具显示负责发出每个请求的本地客户端进程的名称。客户端进程通常是您的 Web 浏览器(例如 firefox.exe),但客户端进程工具可以帮助您发现许多可能未知的 HTTP 客户端。

Compose(编辑修改)

Compose 工具允许在原有的请求基础上修改。

Repeat(重复)

Repeat 工具允许选择一个请求并重复它。Charles 将请求重新发送到服务器,并将响应显示为新请求。如果您正在进行后端更改并希望在浏览器(或其他客户机)中重复请求的情况下测试这些更改,那么这将非常有用。特别是如果重新创建请求需要花费一些精力,例如在游戏中获得分数,这将节省大量精力。

重复请求是在 Charles 内部完成的,因此无法在浏览器或其他客户端中查看响应,响应只能在 Charles 中查看。

Repeat Advanced(高级重复)

Repeat Advanced 工具扩展了 Repeat 工具,提供了迭代次数和并发数的选项。这对于负载测试非常有用。

Validate(验证)

Validate 工具允许 Charles 通过将它们发送到 W3C HTML 验证器、W3C CSS 验证器和 W3C Feed 验证器来验证记录的响应。

验证报告在 Charles 中显示,其中包含与响应源中相应行相关联的任何警告或错误(双击错误消息中的行号可以切换到源视图)。

因为 Charles 测试它记录的响应,所以它可以测试不易测试的场景,例如在提交表单后呈现错误消息。

重新验证

验证后,可以从验证结果中选择响应并 Repeat,重复原始请求,然后重新验证结果。

Publish Gist(发布要点)

Publish Gist 工具可以将将所选请求和响应作为要点发布。默认情况下,这个要点将匿名发布,这意味着你将无法做到 删除它。可以在 Tools 菜单的 Publish Gist Settings 中授权 Charles 使用您的 GitHub 帐户进行发布。
Import/Export Settings(导入/导出)

Import/Export 工具允许导入/导出 Charles 的 Proxy、Tools、Preferences 等设置。

Profiles(配置)

Profiles 包含所有配置设置的完整副本。

每次更改当前设置时,系统都会更新当前活动的配置文件,当您更改活动配置文件时,所有设置都将恢复为上次使用该配置文件时的状态。

请注意,如果导入已保存的配置,则会覆盖当前配置文件的设置。建议使用导入/导出来备份或创建当前配置和配置文件的快照,以维护多个并行工作区。

charles SSL证书安装

电脑安装SSL证书

选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”
image-1651386457177
image-1651386527289
image-1651386554999

配置SSL的抓取域名

选择 “Proxy” -> “SSL Proxying Settings”
启用SSL代理,配置location
image-1651386798000
设置通用的https抓包规则
image-1651387047920

手机的抓包

charles查看IP地址和端口
image-1651397522288
image-1651397551056
记住个人电脑上charles上的IP和端口,我这里的端口8888 ip 192.168.3.7每个人的不同,

安卓模拟器

image-1651397884798
下载证书:
image-1651398137816

iPhone

image-1651400003862

安卓手机

步骤一 将手机和Charles连接并下载证书:
1、将手机和电脑连接至同一WiFi
2、打开Charles–help–Local IP Addresses查看ip地址
3、打开手机–WiFi–设置代理为手动,输入ip和端口号
4、打开手机浏览器输入:chls.pro/ssl 下载Charles证书
5、可能由于安卓版本限制,不能直接安装证书,需要从手机–设置–系统安全–加密与凭据–从SD卡安装
步骤二 unknown解决方法:
1、安装证书后,因安卓版本原因,导致该证书并没有安装至系统证书,所以此时抓包看到的请求和响应依然为(unknown)
2、解决方法,将证书移至手机系统目录(/system/etc/security/cacerts/)需要通过adb命令,切换为超级用户使用命令:su
3、由于证书安装完后,通过adb命令查看该路径(/data/misc/user/0/cacerts-added )就是一个hash值,所以将该hash值复制到系统目录(/system/etc/security/cacerts/)即可
使用命令(/data/misc/user/0/cacerts-added # cp hash值.0 /system/etc/security/cacerts/)
4、复制发现,此时system文件为只读,所以修改system文件编辑权限