Charles是一款代理服务起,通过成为电脑或者浏览器的代理,截取请求和请求结果以达到分析抓包的目的。
开发语言:Java
适用系统:Windows,Mac,Linux
主要功能:
- 支持SSL代理,可以截取分析SSL的请求;
- 支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求;
- 支持AJAX调试。可以自动讲 Json 或者 xml 数据格式化,方便查看;
- 支持AMF调试。可以将Flash Remoting 或 Flex Remoting 信息格式化,方便查看
- 支持重发网络请求,方便后端调试;
- 支持修改网络请求参数;
- 支持网络请求的结果并动态修改;
- 检查HTML,CSS和RSS内容是否符合W3C标准;
开始抓包
1、将电脑设置为代理
Proxy —> Windows Proxy
此时,通过浏览器请求的网址都会出现在上面,如果你发现返回的是乱码,首先看是在http请求还是https请求:
-
如果是http请求,那么应该就是返回来的中文乱码,解决方案是找到该软件显示包内容,Contents目录下的info.plist,打开文件找到
vmoption
,添加-Dfile.encoding=UTF-8
即可。 -
如果是https请求,则需要安装 Charles的CA证书:Help—>SSL Proxying —> Install Charles Root Certificate
-
如果抓取手机上的https请求,需要在手机上也安装CA证书:
- 点击Charles顶部菜单:Help —> SSL Proxying —> Install Charles Root Certificate on a Mobile Device or Remote Browser,即可看到Charles弹出的安装教程。
CA证书安装:
ios移动端设置:
safari浏览器打开网址:chls.pro/ssl
下载安装证书。
设置->通用->描述文件->选择描述文件,安装。
设置->通用->关于本机->证书信任设置->选择证书,信任。
android 移动端设置:
浏览器打开网址:chls.pro/ssl
下载安装证书。
小米:
MIUI12 设置——密码与安全—系统安全—加密与凭据—从存储设备安装
(miui10及以上)点击设置-更多设置-系统安全-加密与凭据-从存储卡安装文件
(miui10一下)点击设置-更多设置-系统安全-从存储卡安装文件
2、打开Charles代理设置:
Proxy —>Proxy settings,设置端口号,默认5389即可,并且勾选Enable transparent HTTP proxying
。
3、手机和电脑连接在同一局域网上,并在网络上设置http代理
一、使用功能
1、过滤
方法1:
Proxy—>Recording Settings,选择Include栏,选择 Add ,然后填入需要监控的协议,主机地址,端口号
方法2:
在左侧structure中,右键某个网址,选择 Focus,其他请求就会被放到 other Host的文件夹中,从而实现过滤。
2、断点
右键网址,选择 BreakPoint即可断点某一请求。
在Charles发起一个请求的时候,给某个请求大一个断点来观察或者修改请求或者返回的内容,注意 请求超时的时间问题。
3、模拟低速网速
Proxy —>Throttle Setting:
选择 Enable Throttling,在Throttle Preset 下选择网络类型
4、请求重定向
1、将指定的网路请求重定向到另一个网址请求地址
Tools —>Map Remote
分别填写网络重定向的源地址和目标地址们对于不需要限制的条件,可以留空。
2、将指定的网络请求重定向到本地文件
Tools —> Map Local
需要填写重定向的源地址和本地目标文件。对于有一些复杂的网络请求结果,我们可以先使用 Charles 提供的 “Save Response…” 功能,将请求结果保存到本地(如下图),然后稍加修改,成为我们的目标映射文件。
将一个指定的网络请求通过 Map Local 功能映射到了本地的一个经过修改的文件中。
Map Local 在使用的时候,有一个潜在的问题,就是其返回的 Http Response Header 与正常的请求并不一样。这个时候如果客户端校验了 Http Response Header 中的部分内容,就会使得该功能失效。解决办法是同时使用 Map Local 以下面提到的 Rewrite 功能,将相关的 Http 头 Rewrite 成我们希望的内容。
5、内容替换
Tools —> Rewrite Settings
适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。
6、给服务器做压力测试
选择一个测试的网络请求,右击选择 Repeat Advanced,在弹出的对话框中选择打压的并发线程数以及打压次数。
7、反向代理
Proxy —> Reverse Proxies Settings
允许我们将本地的端口映射到远程的另一个端口上。例如,在下图中,我将本机的 8080 端口映射到了远程(http://pangao1990.github.io)的80端口上了。这样,当我访问本地的 8080 端口时,实际返回的内容会由 http://pangao1990.github.io 的 80 端口提供。
二、遇到问题
1、手机抓包出现Unknown
参考帖2 更改安卓代码AndroidManifest.xml等
出现SSLHandshake:Received fatal alert:certificate_unknown
原因:安卓7.0系统安全策略问题
原因:CA证书的问题,一定要使用同一局域网中,设置好手动代理之后下载CA证书并安装。
2、Proxy菜单
3、抓包借口测试相关HTTP状态码说明
Filter | 过滤,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求 |
---|---|
Overview | 查看这次请求的详细内容,例如耗时详细列车了请求开始时间、结束时间,响应开始时间、结束时间,总耗时、DNS耗时、网络延时等。 |
URL | 进行网络请求的链接; |
Status: | 当前状态,complete表示请求完成; |
Responce Code: | 返回码。不同的接口,不同的请求结果,返回码都不同; |
Protocol: | 使用的协议; |
Method: | 请求方式,如GET请求,POST请求等; |
Kept Alive: | 判断当前是否正在链接(活跃); |
Content-Type: | 发送的内容类型,如这里用的是XML文本,以UTF8的方式发送; |
Client Address: | 客户端的IP地址; |
Remote Address: | 远程服务器的IP; |
Timing: | |
Request Start Time: | 请求开始的时间; |
Request End Time: | 请求结束的时间; |
Response Start Time: | 返回开始的时间; |
Response End Time : | 返回结束的时间; |
Duration : | 总时间; |
Size: | |
Request Header : | 请求的头部大小; |
Response Header: | 返回的头部大小; |
Request : | 请求发送的大小; |
Response: | 返回数据的大小; |
Total: | 所有数据大小; |
Request Compression : | 请求压缩; |
Response Compression : | 返回压缩; |
Request : | 查看请求内容(底下的Headers,Query String,Cookies,Raw。) |
Headers: | 发送请求的头部信息; |
Query String : | 发送参数列表; |
Cookies: | 浏览器缓存; |
Raw: | 发送的原生数据,包括了头部和参数; |
Reponse : | 查看响应内容 |
Headers: | 是返回的头部信息; |
Text: | 返回信息(除去头部)后的文本; |
Hex: | 返回信息的16进制表示; |
XML: | 我返回的数据是XML。如果你返回的是JSON,这里就会显示JSON; |
XML Text: | 如果你返回JSON,这里会显示JSON Text; |
Raw: | 返回的所有原生数据,包括头部; |
Summary: | 查看发送数据的一些简要信息(主机,状态码,数据的类型,header和body大下,加载时间,总时间) |
Chart: | Summary中简要信息以图表形式展示 |
Notes: | 其他信息 |
二、http换socket5
1、charles设置对比
http | socket5 | 备注 |
---|---|---|
设置入口: | ||