Charles抓包工具
Charles
是一个
HTTP
代理工具,使开发人员能够查看客服端和
服务器
之间的所有
HTTP/ HTTPS/SSL
网络请求。
Charles
是在
PC
环境下常用的网络抓包截取工具,在做移动开发时,我们为了调试客户端与服务端的网络通讯协议,常常需要截取网络请求来分析。
Charles
通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络抓包的截取和分析。除了在做移动开发中调试接口外,
Charles
也可以用于分析第三方应用的通讯协议。配合
Charles
的
SSL
功能,还可以分析
Https
协议。
下载安装
下载地址:https://www.charlesproxy.com/download/
根据自己的系统版本来选择对应的版本来安装即可,
Charles
是付费软件,有
30
天免费试用期限,试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过
30
分钟,并且启动时将会有
10
秒种的延时。
Charles主界面
Charles的主菜单包括:
File、Edit、View、Proxy、Tools、Window、Help
。用的最多的主菜单分别是
Proxy
和
Tools
。
Charles
顶部工具导航栏中提供了几种常用工具:
证书安装
PC端安装证书
这里以
Win10
环境作为演示。打开
charles
,选择
help–>SSL Proxying–> Install Charles Root Ceriticate
,点击安装证书,一直点击下一步完成即可成功安装。如下图所示:
- 选择安装到本地计算机
-
将证书安装在
受信任的根证书颁发机构
- 最后提示导入成功,可以在证书路径中查看证书安装结果。
手机配置
如果我们需要对手机设备上的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&小米设备安装证书
-
OPPO设备安装证书方法:
help->SSL Proxying->Save charles root certificate
,下载一个cer
的证书到你的电脑,然后放到手机目录。
-
打开手机设置->其他设置->设备与隐私->从储存设备中安装证书->搜索
cer
->然后点击安装之前放置的证书即可。 -
小米设备安装证书方法:
help->SSL Proxying->Save charles root certificate
,下载一个pem
的证书到你的电脑,然后放到手机目录。 -
进入小米手机 设置->更多设置(系统和设备)->系统安全->加密与凭据->从SD卡安装 , 手机左上角选择进入系统文件系统选择
.pem
证书,会提示输入锁屏密码输入锁屏密码安装成功。 -
如果设置好代理,在手机上进行任何操作
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”.
<div class="nav-items">
<li ><a href="https://book.douban.com/cart/"
>购书单2020</a>
<li ><a href="https://read.douban.com/ebooks/?dcs=book-nav&dcm=douban"
target="_blank"
>电子图书</a>