Charles抓包工具应用实践

简介

Charles是一个HTTP代理工具,使开发人员能够查看客服端和服务器之间的所有HTTP/ HTTPS/SSL网络请求。
Charles是在PC环境下常用的网络抓包截取工具,在做移动开发时,我们为了调试客户端与服务端的网络通讯协议,常常需要截取网络请求来分析。

Charles通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络抓包的截取和分析。除了在做移动开发中调试接口外,Charles 也可以用于分析第三方应用的通讯协议。配合 CharlesSSL 功能,还可以分析 Https 协议。

下载安装

下载地址:https://www.charlesproxy.com/download/

根据自己的系统版本来选择对应的版本来安装即可,Charles是付费软件,有30天免费试用期限,试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30 分钟,并且启动时将会有10秒种的延时。

如果需要破解,打开:在线破解地址
注册名称随意填写,然后选择自己安装的charles版本号,点击即可生成一个charles.jar包,将生成的charles.jar替换原来安装目录lib下的charles.jar包即可。
注意:生成的jar包只有10分钟的有效期,需要在10分钟内完成破解的操作。

Charles 4.2目前是最新版,可用。

Charles主界面

Charles的主菜单包括:File、Edit、View、Proxy、Tools、Window、Help。用的最多的主菜单分别是 Proxy Tools

Charles顶部工具导航栏中提供了几种常用工具:

charles_tools

证书安装

PC端安装证书-windows

这里以Win10环境作为演示。打开charles,选择help–>SSL Proxying–> Install Charles Root Ceriticate,点击安装证书,一直点击下一步完成即可成功安装。如下图所示:

charles_pc_ceriticate

charles_ceriticate_install

  1. 选择安装到本地计算机

ceriticate_import

  1. 将证书安装在受信任的根证书颁发机构

charles_ceriticate_install2

  1. 最后提示导入成功,可以在证书路径中查看证书安装结果。

charles_install_success

PC端安装证书-Mac Os

  • 同样是打开charles,选择help–>SSL Proxying–> Install Charles Root Ceriticate 然后输入密码安装证书到系统路径。

charles-mac-ca-install.png

  • 安装完成后需要信任证书

charles-ca-detail

  • Chrome浏览器配置需要安装插件SwitchySharp,然后设置代理地址为127.0.0.1端口号为8888

SwitchySharp-setting

  • 另外需要网络设置代理,配置好之后即可抓取chrome浏览器的请求。
    mac-proxy-network

手机配置

如果我们需要对手机设备上的App进行抓包,那么需要在手机设备上进行证书和网络配置才能进行抓包。

charles端口配置

Charles的菜单栏上选择Proxy->Proxy Settings,填入代理端口8888(注意,这个端口不一定填写8888,也可以写别的端口,但是需要记住这个端口,最好不要和电脑其他服务端口冲突),并且勾上Enable transparent HTTP proxying 就完成了在Charles上的设置。如下图:

proxy settings

查看电脑IP地址:Help->Local IP Address

local ip address

手机设备证书安装

为了抓取Https请求,则必须在手机上安装charles证书,证书安装之前请务必将手机设备和电脑连接在一个Wifi网络环境下。

Android

proxy_Android

  1. 在设备wifi连接配置好代理电脑ip+8888
  2. 设置好代理之后在手机上任意打开一个App,此时charles会弹出是否允许连接的弹窗,点击Allow
    image
  3. 打开手机浏览器(最好不用设备自带的浏览器,使用Chrome浏览器)输入网址:chls.pro/ssl下载证书直接安装即可。
  4. 部分设备通过浏览器无法安装的则需要导出证书到设备上安装,如OPPO和小米的设备。
OPPO Vivi&小米设备安装证书
  1. OPPO设备安装证书方法:help->SSL Proxying->Save charles root certificate,下载一个cer的证书到你的电脑,然后放到手机目录。

save_charles_root_cer

  1. 打开手机设置->其他设置->设备与隐私->从储存设备中安装证书->搜索cer->然后点击安装之前放置的证书即可。
  2. 小米设备安装证书方法:help->SSL Proxying->Save charles root certificate,下载一个pem的证书到你的电脑,然后放到手机目录。
  3. 修改pem证书格式为crt,点击设置->密码与安全->系统安全->加密与数据凭证->安装证书->CA证书/证书 都安装一下
  4. 如果设置好代理,在手机上进行任何操作charles没有任何反应,则需要判断PC和手机的网络是否可以ping通,可以在电脑上打开cmd窗口ping手机的ip,如果ping不通则需要设置手机和电脑在一个wifi环境下,如果在一个环境下需要重启charles或者设备使电脑和设备能够ping通。
iOS
  1. 在设备wifi连接配置好代理电脑ip+8888

proxy_ios

  1. 手机连接电脑代理,打开浏览器,输入网址:chls.pro/ssl
  2. 手机弹出提示:此网站正尝试打开“设置”已向您显示一个配置描述文件。您要允许吗?忽略|允许,选择允许,安装描述文件,并信任。
  3. iOS10以上的手机需要在:设置→ 通用 → 关于本机 → 证书信任设置→ 找到charles proxy CA证书,打开信任即可。

charles_ios_cer

抓包实践

PC端抓包

1.在菜单依次点击 Proxy-> Windows Proxy即可开启对电脑请求进行抓包,如果安装后启动Charles没有看到该菜单,需要重启电脑即可。

winows_proxy

  1. 打开浏览器打开百度页面,即可看到抓包请求。

charles_baidu

Charles 主要提供两种查看抓包的视图,分别名为 StructureSequence

  • Structure:此视图将网络请求按访问的域名分类。
  • Sequence:此视图将网络请求按访问的时间排序。

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

charles_Structure

设置抓取https

Charles默认只可以抓取http协议的包,https的更安全,需要抓取https请求则需要配置:菜单栏 Proxy–>SSL Proxying Setting–>选择SSL Proxying——>点击add在弹框中port里填写443(443代表通用https端口号), host中的*代表抓取所有地址的包。

ssl_proxying_settings

移动端抓包

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 SettingsSSL 代理设置
  • Access Control Settings:访问控制设置。
  • External Proxy Settings:外部代理设置。
  • Web Interface Settings:Web 界面设置。

charles_proxy

Recording Settings

Recording SettingsStart/Stop Recording 配合使用,在 Start Recording 的状态下,可以通过 Recording Settings 配置 Charles 的会话记录行为。Recording Settings 的视图如下图所示:

Recording Settings

Recording SettingsOptions、Include、Exclude 三个选项卡:

  • Options:通过 Recording Size Limits 限制记录数据的大小。当Charles 记录时,请求、响应头和响应体存储在内存中,或写入磁盘上的临时文件。有时,内存中的数据量可能会变得太多,Charles 会通知您并停止录制。在这种情况下,您应该清除 Charles 会话以释放内存,然后再次开始录制。在录制设置中,您可以限制 Charles 将记录的最大大小。
  • Include:只有与配置的地址匹配的请求才会被录制。
  • Exclude:只有与配置的地址匹配的请求将不会被录制。

IncludeExclude 选项卡的操作相同,选择 Add,然后填入需要监控的Procotol、HostPort等信息,这样就达到了过滤的目的。如下图所示:

add_location

还有一种方法就是在一个请求网址上右击选择 Focus,然后其他的请求就会被放到一个叫 Other Host 的分类里面,这样也达到了过滤的目的。如果选择Ignore那么该请求将会被放在Exclude中,如果希望恢复对该请求的捕捉那么需要从Exclude删除。

charles_focus_igonre

Throttle Settings

Throttle SettingsStart/Stop Throttling 配合使用,在 Start Throttling 的状态下,可以通过 Throttle Settings 配置 Charles 的网速模拟配置。Throttle Settings 的视图如下图所示:

Throttle Settings

  • 勾选 Enable Throttling 启用网速模拟配置,在 Throttle Preset 下选择网络类型即可,具体设置可以根据实际情况自行设置。如果只想模拟指定网站的慢速网络,可以再勾选上图中的 Only for selected hosts 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。
  • 勾选Only for selected hosts 可以针对特定的域名来限制网速,否则是针对所有请求进行限速。

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

  • bandwidth :带宽,即上行、下行数据传输速度
  • utilisation: 带宽可用率,大部分是100%
  • round-trip latency:第一个请求的时延,单位是ms
  • MTU :最大传输单元,即TCP包的最大size,可以更真实模拟TCP层,每次传输的分包情况。
  • Reliability :指连接的可靠性。这里指的是10kb的可靠率。用于模拟网络不稳定。
  • Stability :连接稳定性,也会影响带宽可用性。用于模拟移动网络,移动网络连接一般不可靠。
  • unstable quality range:不稳定质量范围。

Breakpoint Settings

Breakpoint SettingsEnable/Disable Breakpoints配合使用,在 Enable Breakpoints 的状态下,可以通过 Breakpoint Settings 配置 Charles 的断点模式。

Breakpoint Settings

  • 勾选Enable Breakpoints启用断点模式,选择 Add,然后填入需要监控的Scheme、Procotol、HostPort 等信息,这样就达到了设置断点的目的。然后可以来观察或者修改请求或者返回的内容,但是在这过程中需要注意请求的超时时间问题。
  • 也可以在某个想要设置断点的请求网址上右击选择 Breakpoints 来设置断点。

Windows Proxy

如果想要抓取电脑端的请求,勾选Windows Proxy 选项即可;如果只需要抓取手机请求,则取消勾选这个选项。

Proxy Settings

可以设置HTTPSocket的代理端口号,一般默认8888

proxy settings

Web Interface Settings

Web Interface Settings 表示 Web 界面设置。Charles 有一个 Web 界面,可以让您从浏览器控制 Charles,或使用 Web 界面作为 Web 服务使用外部程序。
External Proxy Settings 视图中勾选Enable the web interface选项启用 Web 界面。

可以允许匿名访问,也可以配置用户名和密码。还可以通过在配置使用 Charles 作为其代理的 Web 浏览器中访问 http://control.charles/ 来访问 Web 界面。

Web Interface Settings

Web界面提供对以下功能的访问:

  • Throttling:激活或停用任何已配置的网络限制设置
  • Recording:开始和停止会话录制
  • Tools:激活和停用工具
  • Session:导出会话
  • Quit:退出charles

Access Control Settings

Access Control Settings 表示访问控制设置。访问控制列表确定谁可以使用此 Charles 实例。可以选择Add,然后填入允许访问的 IP,这样就达到了允许某个 IP 访问 Charles 的目的。

External Proxy Settings

External Proxy Settings 表示外部代理设置。可能在网络上有一个代理服务器,必须使用该代理服务器才能访问 Internet。在这种情况下,需要将Charles配置为在尝试访问 Internet 时使用现有代理。

可以配置单独的代理地址和端口:

  • HTTP
  • HTTPS
  • SOCKS

Reverse Proxies Settings

正向代理

正向代理类似一个跳板机,比如在外网访问公司内网资源,直接访问访问不到,我们可以在公司内部搭建正向代理服务器,将请求发到代理服务器,代理服务器能够访问内网,这样由代理服务器去取到内网数据,再返回给我们,这样我们就能访问内网资源了。

反向代理

反向代理(Reverse Proxy)隐藏了真实的服务端,当我们请求百度域名(www.baidu.com)时,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了。www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

总结

  • 正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端.
  • 反向代理即是服务端代理, 代理服务端,客户端不知道实际提供服务的服务端

charles反向代理在本地端口上创建 Web 服务器,该端口透明地将请求代理给远程 Web 服务器。反向代理上的所有请求和响应都可以记录在 Charles 中。

Port Forwarding Settings

可以将任何 TCP/IP UDP端口配置为使用 Port Forwarding 工具从 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 Settings 工具可防止客户端应用程序(如 Web 浏览器)缓存任何资源。因此,始终向远程网站发出请求,您始终可以看到最新版本。

该工具可以作用于每个请求(选中 Enable No Caching 即可),也可以仅对配置的请求启用(启用 No Caching 的同时,请选中 Only for selected locations)。

No Caching Settings

Block Cookies Settings

Block Cookies 工具阻止了 Cookie的发送和接收。它可用于测试网站,就像在浏览器中禁用了 Cookie 一样。

该工具可以作用于每个请求(选中 Enable Block Cookies 即可),也可以仅对你配置的请求启用(启用 Block Cookies 的同时,请选中 Only for selected locations)。

Block Cookies Settings

Map Remote Settings

Map Remote 工具根据配置的映射更改请求站点,类似于重定向操作。例如:将访问百度的请求映射到请求搜狗。

Map Remote Settings

另外,点击Import或者Export可以将配置导出或者导入。

Map Local Settings

Map Local 可以将请求响应数据替换为本地数据,例如:我们可以修改豆瓣读书页面内容。

  1. 首先打开豆瓣读书(book.douban.com)页面,然后将请求返回的html页面保存。

book_douban_original

save_response

  1. 我们将保存的html页面内容进行修改,比如将“购书单”菜单改为“购书单2020”.
1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="nav-items">
<ul>
<li ><a href="https://book.douban.com/cart/"
>购书单2020</a>
</li>
<li ><a href="https://read.douban.com/ebooks/?dcs=book-nav&dcm=douban"
target="_blank"
>电子图书</a>
</li>
<li ><a href="https://market.douban.com/book?utm_campaign=book_nav_freyr&utm_source=douban&utm_medium=pc_web"
>豆瓣书店</a>
</li>
</ul>
  1. 选择请求然后鼠标右击,在菜单中选择Map Local,映射到修改之后的文件。

map_local

  1. 再次重新请求,我们可以看到响应的结果就是我们本地修改之后的内容。

douban_book

Rewrite Settings

Rewrite Settings 可以重写接口所有元素的内容,主要可以对某些匹配请求的header、host、url、path、query param、response status、body进行rewrite

例如我们想修改豆瓣电影 我在时间尽头等你 页面显示内容,将电影名称改为 权利的游戏 。步骤如下:

  1. 在Charles中点击菜单栏Tools——>Rewrite, 打开rewrite设置页面。

tool_rewrite

  1. 点击Enable Rewrite,点击左侧的Add

rewrite_settings

  1. 设置匹配接口

add_rewrite_host

  1. 设置Rewrite类型,规则:可以看到,在Rewrite界面上可以选择很多的Type,还能用正则表达式,是一个非常强大的功能。我们这里选择Body类型,将其内容进行替换。替换位置选择Response

rewrite_body

  1. 重新请求可以看到修改之后的页面。

rewrite_movie_result

Black List Settings

Black List Settings域名请求黑名单。当被列入黑名单的域名请求任何页面时,该请求将被 Charles 阻止。您还可以输入通配符来阻止其子域名,一般用来模拟一些接口请求异常的场景。

black_list

White List Settings

White List Settings 域名请求白名单,白名单工具用于仅允许指定的域名请求,如果一个请求与“黑名单”和“白名单”都匹配,则该请求会被阻止。

Repeat(重复)

Repeat 工具允许选择一个请求并重复请求它。Charles 将请求重新发送到服务器,并将响应显示为新请求。重复请求是在 Charles 内部完成的,因此无法在浏览器或其他客户端中查看响应,响应只能在 Charles 中查看。

charles_repeat

Repeat Advanced(高级重复)

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

advance_repeat

参考资料