zoukankan      html  css  js  c++  java
  • Charles 简介 总结 HTTP 抓包 代理 [MD]

    博文地址

    我的GitHub 我的博客 我的微信 我的邮箱
    baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

    目录

    Charles

    简介

    官方下载地址

    charles是一个HTTP代理服务器、HTTP监视器、反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。

    Charles 通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的,能够在Windows,Mac,Linux上使用。安装Charles的时候要先装好Java环境。

    Charles的主要功能:

    • 截取 Http 和 Https 网络封包
    • 支持重发网络请求,方便后端调试
    • 支持修改网络请求参数
    • 支持网络请求的截获并动态修改
    • 支持模拟慢速网络

    破解工具

    Charles 在线破解工具
    blog介绍

    用法:输入RegisterName(此名称随意,用于显示 Registered to xxx),选择本地已安装的版本,点击生成,并下载charles.jar文件替换本地Charleslibcharles.jar文件

    界面介绍

    主菜单

    • 清除会话记录:点击之后可清除抓取到的所有请求
    • 开始/停止抓取会话记录:红色说明正在抓取请求,灰色说明目前不在抓取请求状态
    • 开启/停止限流:灰色乌龟是网速设置正常,绿色乌龟指慢速网速开启了
    • 开启/关闭断点:灰色说明断点未开启,红色说明在使用断点
    • 编辑会话:点击之后可以修改请求的内容,修改后可执行此请求
    • 重新发一遍请求:先选定某一请求,点击该图标则请求会被再次发送
    • 验证回话
    • 工具
    • 配置

    会话右键菜单

    • Repeat:重复执行请求,和主菜单中的功能一样
    • Repeat Advanced:可以指定重复的次数,这样可以选中多会话,在右侧的chart查看请求的时间等性能
    • Focus:在某个域名下点击Focus,会将当前域名放到顶部,没有 Focus 的域名统一放到下面的 Other Hosts 下。可以在View -> Focused Hosts中统一编辑
    • Black List:黑名单中的域名不能联网,可以在Toos -> Black List/Write List下统一更改
    • Write List:白名单开启后,只有白名单中的网络可以访问网络,不在白名单中的不能访问网络。如果一个域名既在 Black List 中也在 Write List 中,则也不能访问网络
    • Export:导出会话 Session 保存到本地,然后下次可以通过File -> Open Session打开本地的 Session
    • Compose:即工具栏上的钢笔的图标,编辑请求然后执行

    两种显示模式

    Charles有两种显示模式,Stucture 和Sequence,其实并没啥大的区别。

    Structure
    按照不同hosts域名分组展示请求。
    点击+之后便可以展开该 host 域名下的所有请求,可以很清晰的看到请求的数据结构,可以很清晰的去分析和处理数据,适合对单一系列的访问请求从宏观上进行把握,可以快速定位。

    Sequence
    按照请求的顺序展示请求。
    可以看到全部请求,适合精确定位内容,因为每条 sequence 都有size、status等属性信息,方便快速定位这条结果的价值。

    内容区域

    请求内容

    • Overview:会展示该请求的一个大体情况,例如:请求头、请求开始时间、响应大小、自己的notes等
    • content:请求和响应的详细内容,配合下面的导航栏进行查看
    • summary:展示一个该请求的大体资源分布情况,例如:服务器响应了多长时间,host是什么等等
    • chart:以表格形式告诉我们一个响应时间的分布情况
    • notes:点击之后自己可以对该请求记录一些东西,方便后续查看该接口的用途,可在overview中查看

    request 导航栏

    • header :详细的请求头信息
    • query string :请求时携带的参数
    • cookies :以表格的形式展示请求中的 Cookie 信息
    • raw :完整的原始请求信息

    response 导航栏

    • header :详细的响应头信息
    • text :以文本形式显示响应体
    • hex、compressed :以十六进制、压缩形式显示响应体,一般不予查看
    • JavaScript、json、json text:以json形式显示响应体,区别不大
    • raw :完整的原始响应信息

    抓包

    HTTP 抓包

    原理

    当你使用代理服务器后,所有的 HTTP 请求,都是先发到代理服务器,然后由代理服务器重新包装后,再发给目标服务器;响应也是如此,代理服务器先接收来自目标服务器的响应,然后包装后发给客户端,从而在代理服务器上可以实现抓包。

    使用方式

    • 工具栏选择 Proxy -> Proxy Settings,并且勾选 Enable transparent Http proxying,设置一个端口号
    • 在手机端打开你的 Wifi 设置,长按已经连接的 Wifi,继续点击进入设置页面,勾上[手动代理]选项,代理服务器主机名、端口号填写 Charles 上的配置的
    • 当手机连接上代理后并有网络请求时,Charles 会弹出相应的提示框,点击Allow即可

    HTTPS 抓包

    完成上述配置即可以对手机端发送的 HTTP 请求进行抓包。但由于 Chrles 属于代理服务器,缺少SSL证书,无法对HTTPS请求进行抓包,需进行如下配置。

    方式一

    • 点击 Proxy -> SSL Proxying Settings ,勾选上Enable SSL Proxying
    • 点击 Add Host 填写需要代理的 host 及端口号,支持通配符*,如果两者都是*,则会代理所有 host 的请求
    • 点击 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device 出现弹窗
    • 在手机浏览器输入地址 chls.pro/ssl,出现证书下载页面,下载并安装

    方式二

    • Help -> SSL Proxying -> Save Charles Root Certificat -> 输入文件名(如bqt.pem),文件格式默认.pem格式,名称随意
    • 获取证书在安卓系统中的文件名:openssl x509 -subject_hash_old -in bqt.pem,执行后会生成一个类似1ac7b872的名称
    • bqt.pem重命名为1ac7b872.0,必须以.0格式结尾
    • 1ac7b872.0证书 push 到手机adb push 1ac7b872.0 /system/etc/security/cacerts/目录中,可能需要重启手机才能生效
    • 注意:只有 root 过的手机才能通过 push 命令向此目录导入文件

    HTTPS 抓包原理

    HTTPS通信的大致过程:

    • 客户端将自己支持的加密算法发送给服务器,请求服务器证书
    • 服务器选取一组加密算法,并将证书返回给客户端
    • 客户端校验证书合法性,生成随机对称密钥用公钥加密后发送给服务器
    • 服务器用私钥解密出对称密钥,返回一个响应,HTTPS连接建立完成
    • 随后双方通过这个对称密钥进行安全的数据通信

    Charles 作为一个中间人代理,当浏览器和服务器通信时,Charles 接收服务器返回给客户端的证书,但动态生成一张证书发送给客户端,也就是说 Charles 作为中间代理在客户端和服务器之间通信,所以通信的数据可以被 Charles 拦截并解密。

    由于 Charles 更改了证书,客户端(例如浏览器)校验不通过会给出安全警告,必须安装 Charles 的证书后才能进行正常访问。

    请求重定向 Map remote

    当请求这个链接时,将请求重定向到自己定义的一个链接,将其返回值当做自己的返回值。

    实际开发时,有这样的场景,服务端线上版本有bug,你在本地修改程序后,需要模拟实际的线上环境,来验证程序的正确性,最直接的方法就是让客户端修改一下APP的调用地址到你本机,然后重新打一个版本供你模拟测试,这样虽然可以,但效率极其低下,然而Charles为我们解决了这个问题。

    两种配置方式:

    • 会话列表中,右击需要重定向的请求 -> 点击Map Remote -> 将会自动带入需要重定向的链接(Map from),配置好实际请求的链接(Map to),点击OK即可
    • 工具栏处,Tools -> Map Remote -> 勾选Enable选项 -> 点击 Add 添加需要重定向的请求

    注意:

    • To map from a path and its subdirectories you must end the path with a *.
    • To map an entire host leave the path blank. 要映射整个主机,请将路径留空。

    响应重定向 Map local

    重定向到本地的文件内容作为返回值。

    两种配置方式:

    • 会话列表中,右击需要重定向的请求 -> 点击Map local -> 将会自动带入入需要重定向的链接(Map from),选择本地需要被重定向到的目标文件(Map to),点击OK即可
    • 工具栏处,Tools -> Map local -> 勾选Enable选项 -> 点击 Add 添加需要重定向的请求

    使用技巧

    断点调试

    Intercept and edit requests and responses before they are sent and received

    除了修改映射的方法,通过设置断点也可以实现想要的效果。和我们在 IDE 上设置断点一样,在断点处会进入调试模式,请求会暂时中断,这时我们可以进行一些自定义的操作。

    设置 Charless 断点
    Proxy -> Breakpoint Settings -> 勾选 Enable Breakpoints,点击 Add 添加

    对指定的URL开启断点功能
    选择一个URL链接 -> 右键开启菜单 -> 选择 Breakpoints 即可开启此请求的断点。这样Charles会遇到此请求时会弹出中断对话框

    编辑请求与响应的内容

    • 在中断对话框中,用户可以点击 Edit Request 来编辑请求的内容,编辑完成后然后点击 Execute 发出去这个请求给服务端。
    • 在 Edit Request 对话中点击 Execute 发出请求后,服务端返回来数据后,用户点击 Edit Response 可对响应内容进行编辑,完成后然后点击 Execute 发出去这个数据给客户端。

    需要注意一点:通过断点的方式会存在一定的问题。数据被拦截后,客户端的请求超时时长是不会停止计算的,如果没在设置的超时时间内返回数据,本次请求也就按失败处理了。

    过滤抓取请求

    开始抓包后,随着时间的推移,抓取到的网络包越来越多,这时我们可以使用过滤功能,来过滤出我们想要的网络请求。

    Proxy -> Recording Settings 中可以设置网络包的过滤选项,过滤选项中有 Include 和 Exclude 两种选项,只有当 Include 为空时,Exclude 中的设置才会生效。过滤条件支持通配符。

    Include

    • Only requests that match one of the locations below will be recorded.
    • If this list is empty , all requests will be recorded unless otherwise excluded. 除非另有排除。

    模拟网络限速

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

    在Charles的菜单上,选择 Proxy -> Throttle Setting 项,在之后弹出的对话框中,我们可以勾选上Enable Throttling,然后设置 Throttle Preset(限流预值) 等。

    也可以通过点击工具栏上小乌龟的图标开启或停止限流。

    给服务器做压力测试

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

    我们在想打压的网络请求上右击,然后选择Repeat Advanced菜单项,接着我们就可以在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。

    一些写得很弱的投票网站,也可以用这个办法来快速投票。

    2019-10-29

  • 相关阅读:
    BZOJ 1101 莫比乌斯函数+分块
    BZOJ 2045 容斥原理
    BZOJ 4636 (动态开节点)线段树
    BZOJ 2005 容斥原理
    BZOJ 2190 欧拉函数
    BZOJ 2818 欧拉函数
    BZOJ 3123 主席树 启发式合并
    812. Largest Triangle Area
    805. Split Array With Same Average
    794. Valid Tic-Tac-Toe State
  • 原文地址:https://www.cnblogs.com/baiqiantao/p/11757160.html
Copyright © 2011-2022 走看看