文章

Charles

Charles

Charles Settings

Charles http 基本配置

  1. 使手机和电脑在一个局域网内 ,不一定非要是一个 ip 段,只要是同一个路由器下就可以了,比如电脑连接的有线网 ip 为 192.168.16.12,然后手机链接的 wifi ip 192.168.1.103,但是这个有线网和无线网的最终都是来自于一个外部 ip,这样的话也是可以的。
  2. 下面说说具体配置,这里电脑端是不用做任何配置的,但是需要把防火墙关掉(这点很重要)!然后 charles 设置 需要设置下允许接收的 ip 地址的范围 。 设置首先要进入这个位置 Proxy - Access Control Settings 然后如果接收的 ip 范围是 192.168.1.xxx 的话,那么就添加并设置成 192.168.1.0/24 如果全部范围都接收的话,那么就直接设置成 0.0.0.0/0。

4rkh0

  1. 只抓取手机,不抓取电脑
    然后如果勾选了 Proxy - Windows Proxy 的话,那么就会将电脑上的抓包请求也抓取到,如果只抓手机的话,可以将这个设置为不勾选。

Charles 进阶用法

配置 focus

View→Focused Hosts

plz6v

过滤 Record include/exclude(Recording Settings)

在 Charles 的菜单栏选择 Proxy->Recording Settings,然后选择 Include 栏,选择 Add,然后填入需要监控的协议,主机地址,端口号,这样就达到了过滤的目的。
fcjt1

应用场景:某些服务挂了代理访问不了,比如 Google 登录,Google Cubes SDK 发布

focus 某个 host

右键选中某个 host:focus
ukye7
然后 focus 的 Host 就单独一条,其他的在 Other Hosts
bidk5

使用 Charles 模拟弱网环境(Throttle Settings)

菜单栏:Proxy→Throttle Settings
wtv9g
进入 Throttle 设置,可以配置指定 Hosts 弱网环境
工具栏,小乌龟绿色表示开启
y1bmr

使用 Charles 设置断点(Breakpoint Settings)

在 Charles 发起一个请求的时候,我们是可以给某个请求打一个断点的,然后来观察或者修改请求或者返回的内容,但是在这过程中药注意请求的超时时间问题。要针对某一个请求设置断点,只需要在这个请求网址右击选择 Breakpoints 就可以断点某一个请求了。
断点设置:proxy→Breakpoint Settings
jtteg
断点开启:proxy→Enable Breakpoints

或者工具栏大红点
7pyyd

使用 repeat 测试

重复请求:右键选中host,repeat
Repeat Advanced 可以重复定期发送多个请求

请求重定向(Map Remote/Local)

请求重定向的作用是什么呢?开发中一般都是测试环境,如果我们想对比一下和线上版本的区别的话,可以讲测试的请求重定向到正式环境下。在选择 Tools->Map Remote 下:

Map Remote

重定向到远端
4phow

注意上面 map From 中的 Path 配置项使用了 * 通配符,表示匹配 127.0.0.1:8080/api/下的所有文件及子路径,将其重定向到 cmstest.intra.xiaojukeji.com 下的/api/路径下
如果某个不写,保持不变,完整的 map to 过来。

可以在正常的某个请求,右键选择 Map,会自动帮我们把 Map From 的信息填好

MapLocal

mapLocal 类似,只是数据在本地

其他功能

  • map 隐射可以使用的模式匹配符有三种:
  1. *****: 可以匹配 0 个或者多个字符
  2. **?**: 可以匹配一个字符
  3. **[…]**: 范围选择符,可以匹配范围中的任意一个字符
  • 假设 Map From 配置中的各个项为空,表示匹配所有请求,然后 Map To 项的配置不同,代表不同含义

内容替换(Rewrite)

有时候我们会测一下请求的参数不同会带来不同的返回结果以测试是否达到业务需求,或者需要不同的返回结果来验证我们对数据的处理是否正确,这时候需要后台的同事配合,但是有了 Charles,我们可以自己把控接口返回来的内容,比如数据的空与否,数据的长短等等。在 Tools->Rewrite Settings 下:

替换 Body

2ssk5

替换 Query Param

  • 先 Remove Query Param

3p9da

  • 再 Add Query Param

3zuo1

添加 Query Param

添加请求参数,如忽略接口加密的参数

uqjmq

添加 Header

  1. 击菜单栏 Tools,选择 Rewrite;勾选 Enable Rewrite,点击 Add 按钮

4idlz

  1. 添加请求:将请求粘贴到 Host 字段后,自动区分协议、域名、路径

nx1l9

  1. 添加规则

k2ps8

  1. 再次请求

4d7xw

Charles 破解

Charles4.2

破解步骤

将下载的文件重命名为 charles.jar 并覆盖到安装目录下的 lib 文件夹下即可完成破解 (Windows)
将下载的文件重命名为 charles.jar 并覆盖到 Content->Java 下即可完成破解 (MAC)

charles4.2 包破解包(见 charles.jar)

http://download.csdn.net/download/charmer21/10016501


Charles 4.2 目前是最新版,可用。
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4

4.6.3

// Charles Proxy License
// 适用于 Charles 任意版本的注册码,谁还会想要使用破解版呢。
// Charles 4.2 目前是最新版,可用。

1
2
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4

抓包工具 Charles v4.6.3 Win/Mac 破解版 - 附中文补丁

抓包工具Charles v4.6.3 Win/Mac破解版-附中文补丁

抓包不了问题排查

手机和电脑端是否能 ping 通

遇到过手机和电脑是在同一个网段,但是 ping 不通,也就抓不了包了

证书问题:红色的叉 unknown

1hj77

  • Mac 上是否安装并信任证书;

6msfb

  • 手机是否设置代理、是否已安装描述文件;
  • 手机证书是否已信任。
    • iOS 10.3 以后需要额外在 通用>关于本机>证书信任 设置里对 Charles Proxy CA 启用完全信任

f55fz

Android7.0 无法抓包的问题

Android 7.0 之后默认不信任用户添加到系统的 CA 证书:也就是说对基于 SDK24 及以上的 APP 来说,即使你在手机上安装了抓包工具的证书也无法抓取 HTTPS 请求。
需要配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--release只依赖system证书-->
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system"/>
        </trust-anchors>
    </base-config>
    <!--指定域名-->
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">d1.music.126.net</domain>
        <domain includeSubdomains="true">dldir1.qq.com</domain>
        <domain includeSubdomains="true">imgsrc.baidu.com</domain>
    </domain-config>
    <!--debug依赖system和user证书-->
    <debug-overrides>
        <trust-anchors>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>

Manifest 文件的 appliccation 节点配置:android:networkSecurityConfig="@xml/network_security_config"

include 和 exclude 规则

上面还不生效,检查 Proxy→Recording Settings,去除 exclude 的配置

54vpb

Map Local 数据量过大报错

image.png

如果文件极大(如超过 500MB),需调整 Charles 的 JVM 内存上限:

  • 增加 Charles 的 JVM 内存 右键 Charles 应用图标 > 显示包内容 > 编辑 Contents/Info.plist,修改 VMOptions
1
2
<key>VMOptions</key>
<string>-Xmx10240m</string>  <!-- 分配 10GB 内存 -->

Ref

本文由作者按照 CC BY 4.0 进行授权