参考文章
概述
Charles 是在 Mac 下的一款很实用的抓包工具,很容易上手。我们在应用开发中,可以用它来可以用它来监控请求与返回的数据,调试接口。
Charles 和我们大部分使用的翻墙软件一样,通过将自己设置成系统的网络访问代理服务器。使得所有的网络访问请求都通过它来完成,从而实现对网络数据包的截取和分析。
除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。
安装 Charles
Charles 是一款收费软件,我们可以去 Charles官网 进行下载使用。初次下载可以免费试用一段时间,不过试用期间软件会有很多约束,体验较差。所以还是购买正版或者通过相应的破解来正常使用软件,网络上有很多破解资源。我现在使用的版本是 Charles 4.1.3,下载破解的 charles.jar 文件复制到安装的 Charles 程序包的 Contents/Java/
文件夹下覆盖原来的 charles.jar
文件。重新打开软件即可使用。
将 Charles 设置成系统代理
当软件安装好后启动 Charles ,第一次 Charles 会请求你给它设置系统代理的权限。你可以输入登录密码授予 Charles 该权限。你也可以忽略该请求,然后在需要将 Charles 设置成系统代理时,选择菜单中的 Proxy -> macOS Proxy
来将 Charles 设置成系统代理。
Charles 主界面介绍
Charles 主要提供两种查看封包的视图,分别名为 Structure
和 Sequence
。
Structure
视图将网络请求按访问的域名分类。Sequence
视图将网络请求按访问的时间排序。
请求多了有些时候会看不过来,Charles 提供了一个简单的 Filter
功能,可以输入关键字来快速筛选出 URL
中带指定关键字的网络请求。
对于某一个具体的网络请求,你可以查看其详细的请求内容和响应内容。如果请求内容是 POST
的表单,Charles 会自动帮你将表单进行分项显示。如果响应内容是 JSON
格式的,那么 Charles 可以自动帮你将 JSON
内容格式化,方便你查看。如果响应内容是图片,那么 Charles 可以显示出图片的预览。
过滤网络请求
通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,以下几种办法:
方法一:在主界面的中部的 Filter
栏中填入需要过滤出来的关键字。该方法做一些临时性的封包过滤。如上图中标注所示。
方法二:在 Charles 的菜单栏选择 Proxy-> Recording Settings
,然后选择 Include
栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。该方法做一些经常性的封包过滤。
方法三:在想过滤的网络请求上右击,选择 Focus
,之后在 Filter 一栏勾选上 Focussed
一项。该方法也是临时性的封包过滤。
获取 Android 设备上的网络封包
Charles 上的设置
首先需要将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 Proxy->Proxy Settings
,显示代理端口 8888,并且勾上 Enable transparent HTTP proxying
就完成了在 Charles 上的设置。
Android 手机上的设置
首先我们需要获取 Charles 运行所在电脑的 IP 地址,Charles 的顶部菜单的 Help->Local IP Address
,即可在弹出的对话框中看到 IP 地址。
选中与电脑同在的无线网连接上,然后对无线网进行“修改网络配置”。在高级选项中填入代理主机名和代理服务器端口。
保存后,Charles 会弹出一个对话框确认与 Android 设备连接允许,设置好后就可以在 Charles 上查看当前手机访问网络的数据包了。
截取 Android 设备上 Https 协议的通讯信息
在 Android 设备上安装证书
点击 Charles 的顶部菜单,选择 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser
,然后就可以看到 Charles 弹出的简单的安装教程。
在设备上设置好 Charles 为代理后,在手机浏览器中访问地址:chls.pro/ssl
,即可打开证书安装的界面,会弹出一个为证书命名的对话框,随便填一个就行。安装完证书后,就可以截取手机上的 Https 通讯内容了。
其它操作
- 停止电脑对手机的网络监控,系统设置-wifi,代理设置勾选“无”就行;
- 删除手机中证书,安卓系统设置-安全-收信任的凭证-用户,点击证书删除即可;
更多全面的详细操作,可以参考上面的参考文章 Charles 从入门到精通 ,这篇文章写的很全,很赞。