Charles抓包工具应用实践
简介
Charles
是一个HTTP
代理工具,使开发人员能够查看客服端和服务器之间的所有HTTP/ HTTPS/SSL
网络请求。Charles
是在PC
环境下常用的网络抓包截取工具,在做移动开发时,我们为了调试客户端与服务端的网络通讯协议,常常需要截取网络请求来分析。
Charles
通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络抓包的截取和分析。除了在做移动开发中调试接口外,Charles
也可以用于分析第三方应用的通讯协议。配合 Charles
的 SSL
功能,还可以分析 Https
协议。
下载安装
下载地址:https://www.charlesproxy.com/download/
根据自己的系统版本来选择对应的版本来安装即可,Charles
是付费软件,有30
天免费试用期限,试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30
分钟,并且启动时将会有10
秒种的延时。
如果需要破解,打开:在线破解地址
注册名称随意填写,然后选择自己安装的charles版本号,点击即可生成一个charles.jar
包,将生成的charles.jar
替换原来安装目录lib
下的charles.jar
包即可。
注意:生成的jar
包只有10
分钟的有效期,需要在10
分钟内完成破解的操作。
Charles 4.2目前是最新版,可用。
- Registered Name: https://zhile.io
- License Key: 48891cf209c6d32bf4
Charles主界面
Charles的主菜单包括:File、Edit、View、Proxy、Tools、Window、Help
。用的最多的主菜单分别是 Proxy
和 Tools
。
Charles
顶部工具导航栏中提供了几种常用工具:
证书安装
PC端安装证书-windows
这里以Win10
环境作为演示。打开charles
,选择help–>SSL Proxying–> Install Charles Root Ceriticate
,点击安装证书,一直点击下一步完成即可成功安装。如下图所示:
- 选择安装到本地计算机
- 将证书安装在
受信任的根证书颁发机构
- 最后提示导入成功,可以在证书路径中查看证书安装结果。
PC端安装证书-Mac Os
- 同样是打开
charles
,选择help–>SSL Proxying–> Install Charles Root Ceriticate
然后输入密码安装证书到系统
路径。
- 安装完成后需要信任证书
- Chrome浏览器配置需要安装插件
SwitchySharp
,然后设置代理地址为127.0.0.1
端口号为8888
- 另外需要网络设置代理,配置好之后即可抓取chrome浏览器的请求。
手机配置
如果我们需要对手机设备上的App进行抓包,那么需要在手机设备上进行证书和网络配置才能进行抓包。
charles端口配置
在Charles
的菜单栏上选择Proxy->Proxy Settings
,填入代理端口8888
(注意,这个端口不一定填写8888
,也可以写别的端口,但是需要记住这个端口,最好不要和电脑其他服务端口冲突),并且勾上Enable transparent HTTP proxying
就完成了在Charles
上的设置。如下图:
查看电脑IP地址:Help->Local IP Address
手机设备证书安装
为了抓取Https
请求,则必须在手机上安装charles
证书,证书安装之前请务必将手机设备和电脑连接在一个Wifi
网络环境下。
Android
- 在设备wifi连接配置好代理
电脑ip+8888
- 设置好代理之后在手机上任意打开一个
App
,此时charles
会弹出是否允许连接的弹窗,点击Allow
- 打开手机浏览器(最好不用设备自带的浏览器,使用
Chrome
浏览器)输入网址:chls.pro/ssl
下载证书直接安装即可。 - 部分设备通过浏览器无法安装的则需要导出证书到设备上安装,如
OPPO
和小米的设备。
OPPO Vivi&小米设备安装证书
- OPPO设备安装证书方法:
help->SSL Proxying->Save charles root certificate
,下载一个cer
的证书到你的电脑,然后放到手机目录。
- 打开手机设置->其他设置->设备与隐私->从储存设备中安装证书->搜索
cer
->然后点击安装之前放置的证书即可。 - 小米设备安装证书方法:
help->SSL Proxying->Save charles root certificate
,下载一个pem
的证书到你的电脑,然后放到手机目录。 - 修改
pem
证书格式为crt
,点击设置->密码与安全->系统安全->加密与数据凭证->安装证书->CA证书/证书 都安装一下 - 如果设置好代理,在手机上进行任何操作
charles
没有任何反应,则需要判断PC
和手机的网络是否可以ping
通,可以在电脑上打开cmd
窗口ping
手机的ip
,如果ping
不通则需要设置手机和电脑在一个wifi
环境下,如果在一个环境下需要重启charles
或者设备使电脑和设备能够ping
通。
iOS
- 在设备wifi连接配置好代理
电脑ip+8888
- 手机连接电脑代理,打开浏览器,输入网址:
chls.pro/ssl
- 手机弹出提示:此网站正尝试打开“设置”已向您显示一个配置描述文件。您要允许吗?忽略|允许,选择允许,安装描述文件,并信任。
iOS10
以上的手机需要在:设置→ 通用 → 关于本机 → 证书信任设置→ 找到charles proxy CA
证书,打开信任即可。
抓包实践
PC端抓包
1.在菜单依次点击 Proxy-> Windows Proxy
即可开启对电脑请求进行抓包,如果安装后启动Charles没有看到该菜单,需要重启电脑即可。
- 打开浏览器打开百度页面,即可看到抓包请求。
Charles
主要提供两种查看抓包的视图,分别名为 Structure
和 Sequence
。
Structure
:此视图将网络请求按访问的域名分类。Sequence
:此视图将网络请求按访问的时间排序。
使用时可以根据具体的需要在这两种视图之前来回切换。请求多了有些时候会看不过来,Charles
提供了一个简单的Filter
功能,可以输入关键字来快速筛选出 URL
中带指定关键字的网络请求。
设置抓取https
Charles
默认只可以抓取http
协议的包,https
的更安全,需要抓取https
请求则需要配置:菜单栏 Proxy–>SSL Proxying Setting–>选择SSL Proxying
——>点击add
在弹框中port
里填写443
(443
代表通用https
端口号), host
中的*
代表抓取所有地址的包。
移动端抓包
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
将记录的最大大小。Include
:只有与配置的地址匹配的请求才会被录制。Exclude
:只有与配置的地址匹配的请求将不会被录制。
Include
和 Exclude
选项卡的操作相同,选择 Add
,然后填入需要监控的Procotol、Host
和 Port
等信息,这样就达到了过滤的目的。如下图所示:
还有一种方法就是在一个请求网址上右击选择 Focus
,然后其他的请求就会被放到一个叫 Other Host
的分类里面,这样也达到了过滤的目的。如果选择Ignore
那么该请求将会被放在Exclude
中,如果希望恢复对该请求的捕捉那么需要从Exclude
删除。
Throttle Settings
Throttle Settings
和 Start/Stop Throttling
配合使用,在 Start Throttling
的状态下,可以通过 Throttle Settings
配置 Charles
的网速模拟配置。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 Settings
和Enable/Disable Breakpoints
配合使用,在 Enable Breakpoints
的状态下,可以通过 Breakpoint Settings
配置 Charles
的断点模式。
- 勾选
Enable Breakpoints
启用断点模式,选择Add
,然后填入需要监控的Scheme、Procotol、Host
和Port
等信息,这样就达到了设置断点的目的。然后可以来观察或者修改请求或者返回的内容,但是在这过程中需要注意请求的超时时间问题。 - 也可以在某个想要设置断点的请求网址上右击选择
Breakpoints
来设置断点。
Windows Proxy
如果想要抓取电脑端的请求,勾选Windows Proxy
选项即可;如果只需要抓取手机请求,则取消勾选这个选项。
Proxy Settings
可以设置HTTP
或Socket
的代理端口号,一般默认8888
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界面提供对以下功能的访问:
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
)。
Block Cookies Settings
Block Cookies
工具阻止了 Cookie
的发送和接收。它可用于测试网站,就像在浏览器中禁用了 Cookie
一样。
该工具可以作用于每个请求(选中 Enable Block Cookies
即可),也可以仅对你配置的请求启用(启用 Block Cookies
的同时,请选中 Only for selected locations
)。
Map Remote Settings
Map Remote
工具根据配置的映射更改请求站点,类似于重定向操作。例如:将访问百度的请求映射到请求搜狗。
另外,点击Import
或者Export
可以将配置导出或者导入。
Map Local Settings
Map Local
可以将请求响应数据替换为本地数据,例如:我们可以修改豆瓣读书页面内容。
- 首先打开豆瓣读书(
book.douban.com
)页面,然后将请求返回的html
页面保存。
- 我们将保存的
html
页面内容进行修改,比如将“购书单”菜单改为“购书单2020”.
1 | <div class="nav-items"> |
- 选择请求然后鼠标右击,在菜单中选择
Map Local
,映射到修改之后的文件。
- 再次重新请求,我们可以看到响应的结果就是我们本地修改之后的内容。
Rewrite Settings
Rewrite Settings
可以重写接口所有元素的内容,主要可以对某些匹配请求的header、host、url、path、query param、response status、body
进行rewrite
。
例如我们想修改豆瓣电影 我在时间尽头等你 页面显示内容,将电影名称改为 权利的游戏
。步骤如下:
- 在Charles中点击菜单栏
Tools——>Rewrite
, 打开rewrite
设置页面。
- 点击
Enable Rewrite
,点击左侧的Add
- 设置匹配接口
- 设置
Rewrite
类型,规则:可以看到,在Rewrite
界面上可以选择很多的Type
,还能用正则表达式,是一个非常强大的功能。我们这里选择Body
类型,将其内容进行替换。替换位置选择Response
。
- 重新请求可以看到修改之后的页面。
Black List Settings
Black List Settings
域名请求黑名单。当被列入黑名单的域名请求任何页面时,该请求将被 Charles
阻止。您还可以输入通配符来阻止其子域名,一般用来模拟一些接口请求异常的场景。
White List Settings
White List Settings
域名请求白名单,白名单工具用于仅允许指定的域名请求,如果一个请求与“黑名单”和“白名单”都匹配,则该请求会被阻止。
Repeat(重复)
Repeat
工具允许选择一个请求并重复请求它。Charles
将请求重新发送到服务器,并将响应显示为新请求。重复请求是在 Charles
内部完成的,因此无法在浏览器或其他客户端中查看响应,响应只能在 Charles
中查看。
Repeat Advanced(高级重复)
Repeat Advanced
工具扩展了 Repeat
工具,提供了迭代次数和并发数的选项。这对于负载测试非常有用。