charles是PC端常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。除了在做移动开发中调式端口外,charles也可以用于分析第三方应用的通讯协议。配合chales的SSL功能,Charles还可以分析Https协议。

charles通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。

该软件是用Java写的,能够在windows,mac,linux上使用。开发ios都在mac系统上吧,安装charles的时候要先装好java环境

青花瓷Charles工具大郅原理

charles作为一个中间人代理,在客户端给服务器端发消息的时候,会截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信。服务器返回数据时将截取的数据发送给客户端

伪装成服务器与客户端进行通信

charles主要的功能包括

  1. 截取Http和Https网路封包
  2. 支持重发网络请求,方便后端调试
  3. 支持修改网络请求参数
  4. 支持网络请求的截获并动态修改
  5. 支持模拟慢速网络
  6. 支持SSL代理。可以截取分析SSL的请求
  7. 支持AJAX调试。可以自动将JSON或XML数据格式化,方便查看

安装Charles

安装:打开浏览器访问Charles官网https://www.charlesproxy.com/,下载相应系统的Charles安装包,然后一键安装即可,直接下载安装即可,过程比较简单。破解:官方版本只支持免费使用30天,可通过替换安装包内容中的 charles.jar 文件进行破解。

或者用老师给的直接用接收的或者是已有的然后进行安装将 Charles 设置成系统代理

在之前的简介里有提到过,Charles 是通过将自己设置成代理服务器来完成封包截取的,所以使用 Charles 的第一步是将其设置成系统的代理服务器。

启动 Charles 后,第一次 Charles 会请求你给它设置系统代理的权限。你可以输入登录密码授予 Charles 该权限。你也可以忽略该请求,然后在需要将 Charles 设置成系统代理时,选择菜单中的 “Proxy” -> “Mac OS X Proxy” 来将 Charles 设置成系统代理。

Charles主界面介绍





Charles主界面介绍(请求导航栏)

charles提供两种查看封包的页签

一个是structure,另一个是Sequence

  • structure:树状结构显示,将网络请求按访问的域名分类
  • sequence:水平结构显示,将网络请求按访问的时间排序

任何程序都可以在charles中的structure窗口中看到访问的域名

从上至下的图标解释:

扫把按钮:点击之后可清除抓取到的所有请求

图标按钮:红点亮起说明正在抓取请求,红点展示为灰色说明目前不在抓取请求状态

乌龟按钮:灰色乌龟是网速设置正常,绿色乌龟指慢速网速开启了

六角形图标:断点图标,灰色说明断点未开启,红色说明在使用断点

钢笔图标:编辑请求,点击之后可以修改请求的内容

刷新图标:重复发送请求的图标,先选定某一请求点击该图标则请求会被再次发送

扳手图标:对应于导航栏中的tools图标,有些许功能

设置图标:设置charles中的情况

File:文件

Edit:编辑

View:视图

Proxy:代理服务器

Tools:工具

Window:窗口

Help:帮助

黄色区展示的是某一制定请求的请求内容,可以切换导航栏查看请求的各种详细情况。例如:请求响应时间,请求头,请求详细内容,请求体等各种情况。

我们先看一下常用的几个选项:

Overview:会展示该请求的一个大体情况,例如:请求头,请求响应结束时间,请求开始时间以及自己的notes等

content:如上图所示的该请求的具体内容和服务器的相应内容(配合下面的导航栏进行查看该请求的具体内容header,cookies&&选择呈现方式form,raw)

summary:也是展示一个该请求的大体资源分布情况。例如:服务器响应了多长时间,host是什么等等

chart:以表格形式告诉我们一个响应时间的分布情况。

notes:已经很清楚了,点击之后自己可以对该请求记录一些东西,方便后续查看该接口的用途,可在overview中查看

绿色区展示的是请求相应内容。同样,是点击导航栏会展示响应内容的详细情况。

header:响应的头信息

text:文本形式展示响应内容

hex(16进制)和compressed(压缩)一般不予查看

json:以json格式查看响应内容内容,简单明了

json text:将json格式的内容展开书写

raw:详情内容的详细情况

Proxy菜单

Tools菜单

charles的http协议

HTTP状态码

状态码 响应类别 原因短语
1XX 信息性状态码(Informational) 服务器正在处理请求
2XX 成功状态码(Success) 请求已正常处理 ,完毕
3XX 重定向状态码(Redirection) 需要进行额外操作已完成请求
4XX 客户端错误状态码(Client Error) 客户端原因导致服务器无法处理请求
5XX 服务器错误状态码(Server Error) 服务器原因导致处理请求出错
状态码 响应类别 原因短语
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态码必须和WWW=Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在,eg :输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

截取安卓手机,Iphone上的网络封包

Charles 通常用来截取本地上的网络封包,但是当我们需要时,我们也可以用来截取其它设备上的网络请求,抓取移动设备发送的Http请求先将移动设备连接到Charles客户端,下面我们就讲解如何进行相应操作Charles 上的设置

查看本机连接无线网络的IP地址,这个地址作为移动设备连接Charles客户端的代理地址,移动设备必须要和计算机在同一网络中才能连接上。

打开Charles客户端,点击Proxy->Proxy Settings菜单,可以设置移动设备连接到Charles的端口,这样移动设备代理配置需要的ip地址和端口号都有了。

Charles是通过将自己设置成代理服务器来完成抓包的,勾选系统代理后,本地系统(如果通过浏览器发送请求)发送出去的请求都能被截取下来。因此,如果想只抓取手机APP发送的请求的话,可以不勾选WindowsProxy选项,这样在测试时就不会被本机Http请求所干扰。

另外,如果想要抓取浏览器发送的请求包,勾选WindowsProxy选项之后还是抓取失败,可能是浏览器没有设置成使用系统的代理服务器,只要设置成使用系统的代理服务器,或者将浏览器的代理服务器设置成127.0.0.1:8888也可以成功。

获取所在电脑的Ip地址

首先我们需要获取所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”->”Local IP Address”,即可在弹出的对话框中看到 IP 地址

Windows + R 然后CMD去到黑色命令窗口,输入ipconfig / all然后按下回车键,接下来就可以找到所在电脑的IP地址了,“IP Address……192.168.1.100”

打开电脑的控制面板,找到 “网络和共享中心”,双击点开,找到本地连接,点开,然后就会自动弹出本地的连接状态的对话框,找到“详细信息”点开,这时就会弹出详细的信息窗口,在列表中我们可以找到IPv4就是我们要找的ip地址了

截取安卓手机,iPhone上的网络封包

在 iPhone 和安卓的 “ 设置 “中的” 无线局域网 “ 中,我们可以看到当前连接的 wifi 名,通过点击右边的详情键,可以看到当前连接上的 wifi 的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有「HTTP 代理」一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888

设置好之后,我们打开 iPhone 上的任意需要网络通讯的程序,就可以看到 Charles 弹出 iPhone 请求连接的确认菜单,点击 “Allow” 即可完成设置。

断点功能

方法:

在会话列表中右键点击某个会话,然后在菜单中选择Breakpoints;

通过Proxy-Breakpoint settings...中手动新建/启用某个断点;要求勾选enable breakpoints

之后当下次再有该请求时,会自动进入断点模式;

一个完整请求会进入断点模式2次:

request的发出之前;收到服务器的response但尚未返回给客户端的时候;

断点request的时候,可以修改request信息,不过我们程序都有对请求header做校验和处理,修改参数后一般就直接报错了,所以看看response就好

模拟慢速网络(弱网)

在做移动开发的时候,我们常常需要模拟慢速网络或者高延迟的网络,以测试在移动网络下,应用的表现是否正常。Charles 对此需求提供了很好的支持。

点击上方菜单栏 –> Proxy –> Throttling Settings,打开Throttling Settings弹窗。

勾选Enable Throttling,开启限网功能。

在 Throttle Preset 下选择网络类型即可,具体设置可以根据实际情况自行设置。

(自行选择,如果不是很明显的话那就调到56 kbps Modem)

(当然,也可以自定义网络设置,看个人或者是需求)

如果只想对特定地址的请求进行弱网测试,,勾选Only for selected hosts,添加请求地址的信息。

对特定地址的请求进行弱网测试

过滤网络请求

通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,以下几种办法:

方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:http://yuantiku.com , 那么只需要在 Filter 栏中填入 yuantiku 即可。

方法二:在 Charles 的菜单栏选择 “Proxy”->”Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。



修改网络请求内容

有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。只需要在以往的网络请求上点击右键,选择 “Edit”,即可创建一个可编辑的网络请求

我们可以修改该请求的任何信息,包括 URL 地址、端口、参数等,之后点击 “Execute” 即可发送该修改后的网络请求(如下图所示)。Charles 支持我们多次修改和发送该请求,这对于我们和服务器端调试接口非常方便

给服务器做压力测试

我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下。

我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项

接着我们就可以在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。

下面的图中,选择了三个接口,每次迭代中3个接口同时请求,迭代1000次(总计请求3000次接口),

每个接口每次并发100次请求。

模拟 接口404/403返回值(blacklist方法)

2.允许启用黑名单功能,选择接口返回错误的形式(404 或者403),添加接口地址并保存

注:【blocking connection】 选项可以选择“drop connection”或者 “403 respose”.前者接口会直接返回404错误,后者接口返回403错误

再次请求

屏蔽Web网页的抓包信息(Proxy)

应用场景:屏蔽web网页的抓包信息

proxy-->windows proxy(前面没有对勾,就不会抓到 PC浏览器的包)

proxy-->macOS proxy(mac电脑)

Get与post请求的区别

1、GET使用URL或Cookie传参。而POST将数据放在BODY中。  

2、GET的URL会有长度上的限制,2kb,则POST的数据则可以非常大。  

3、POST比GET安全,因为数据在地址栏上不可见。  

4、一般get请求用来获取数据,post请求用来发送数据。

Cookie与Session

Session和Cookie的主要区别在于:Cookie是把数据保存在浏览器端的内存中Session把数据保存在服务器端的内存中

cookie与session的联系:

当服务器端生成一个session时就会向客户端发送一个cookie保存在客户端,这个cookie保存的是session的sessionId。。这样才能保证客户端发起请求后客户端已经登录的用户能够与服务器端成千上万的session中准确匹配到已经保存了该用户信息的session,同时也能够确保不同页面之间传值时的正确匹

愉快的了解Charles的更多相关文章

  1. Web开发生存工具使用指南

    这里安利两款我认为开发中能够极大的提高生产力的工具,Charles 和 Postman. P.S. Charles(查尔斯)..不要再读查理斯了,金刚狼中被老铁扎心的博士就叫 CharlesP.P.S ...

  2. 关于Charles抓取手机访问的Https请求

    准备工作 本次测试的Charles版本为3.9.1 · 首先在Charles中开启HTTP请求的远程监听. · 然后分别在手机和Mac上安装Charles的证书. 注意:证书一定要一致,否则抓取不到. ...

  3. 如何使用Charles抓包-- 入门篇

    下载地址 注意:首先需要下载java的运行环境支持(一般用burp的人肯定也都有装java环境).装好java环境后,可以直接去百度搜索并下载charles的破解版,下载到破解版之后,里面一般会有注册 ...

  4. 抓包工具 Charles 使用心得

    前言 虽然实习工作还没有着落,但学习还是要继续的嘛,今天就来学习使用下 Mac 下截取网络封包的工具:Charles. 我想,如果你是个善于利用搜索引擎的人,那么在 Google 中输入「Charle ...

  5. charles支持https抓包配置

    自从公司站点全部启用https后,使用charles就不能像以前那样愉快的抓包啦!不过没关系,这里教你怎么配置charles,使其支持https抓包.之前有一篇介绍charles的使用,参考这篇:ht ...

  6. charles抓包https设置

    写在前面 https抓包的实现 (一)首先,电脑得装个证书 (二)然后,移动设备上安装证书 (三)最后,Charles添加SSL Proxying 写在前面 开发时,面对各种接口数据,绝大多数时间都会 ...

  7. Mac上安装Charles进行抓包全流程设置

    安装 -- 官网下载最新版的Charles版本,按照提示安装即可 破解 -- https://blog.csdn.net/qq_25821067/article/details/79848589. M ...

  8. .NET微信开发Charles突破微信授权,获取任意微信网页源代码(含Https)

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用.开发iOS都在 ...

  9. 抓包工具Charles的使用心得

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用.开发iOS都在 ...

  10. charles本地调试之map和rewrite功能

    charles是一款mac下代理调试工具,对于前端开发同学来说是相当方便的一个调试接口的工具:不过charles需要收费,不过在天朝几乎收费的软件都能找到破解方法: 使用charles前,需要将cha ...

随机推荐

  1. Net 高级调试之六:对象检查之值类型、应用类型、数组和异常的转储

    一.简介 今天是<Net 高级调试>的第六篇文章.记得我刚接触 Net 框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力.当然这些见解都是书本上 ...

  2. 告别繁琐,ModelArts一键解决车牌号识别难题

    本文分享自华为云社区<基于ModelArts实现车辆车牌号的目标识别>,作者:屿山岛 . 前言 车辆车牌是车辆的唯一身份标识,能够提供车辆的类型.颜色.归属地等信息,对于交通管理.安全监控 ...

  3. java读取照片Exif信息到实体类

    前言 1.总共读出来了228个参数信息,但是我挑选了36个我认为比较有价值的参数,弄成了实体类 (其实是因为很多参数我看不明白是啥意思) 2.为了方便,所以实体类里我直接用中文字段了 效果图 导入依赖 ...

  4. 🔥🔥Java开发者的Python快速进修指南:面向对象--高级篇

    首先,让我来介绍一下今天的主题.今天我们将讨论封装.反射以及单例模式.除此之外,我们不再深入其他内容.关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符.而对于反 ...

  5. 期望最大化(EM)算法:从理论到实战全解析

    本文深入探讨了期望最大化(EM)算法的原理.数学基础和应用.通过详尽的定义和具体例子,文章阐释了EM算法在高斯混合模型(GMM)中的应用,并通过Python和PyTorch代码实现进行了实战演示. 关 ...

  6. java.util.List如何用

    起因是这样,我在学习Javaweb,然后就突然有很多类似的语句 这是什么意思呢?让我们一起来解决看看吧! List有序集合(也成为序列),用户可以精确控制列表中每个元素的插入位置.用户可以通过整数索引 ...

  7. java 405_Http状态405-方法不允许

    解决方法: 删除下列代码. super.doGet(req.resp); super.doPost(req.resp); 分析: 405错误一般指请求method not allowed 错误. 请求 ...

  8. WPF应用开发之控件动态内容展示

    在我们开发一些复杂信息的时候,由于需要动态展示一些相关信息,因此我们需要考虑一些控件内容的动态展示,可以通过动态构建控件的方式进行显示,如动态选项卡展示不同的信息,或者动态展示一个自定义控件的内容等等 ...

  9. 用EXCEL VBA 做的学生成绩分析系统

    标题:基于EXCEL VBA的学生成绩分析系统--详细介绍与说明导言:学生成绩分析对于教育机构和学生个体来说具有重要意义.本文将详细介绍基于EXCEL VBA的学生成绩分析系统的设计与实现.通过该系统 ...

  10. Netty源码学习7——netty是如何发送数据的

    零丶引入 系列文章目录和关于我 经过<Netty源码学习4--服务端是处理新连接的&netty的reactor模式和<Netty源码学习5--服务端是如何读取数据的>,我们了 ...