一、Charles与Sniffmaster简介
Charles 是一个功能强大的 HTTP 和 HTTPS 抓包工具,通常用于网络开发、移动应用开发以及 API 调试。它允许开发人员查看网络请求和响应的详细信息,帮助分析数据传输中的问题,调试应用程序,或查看网页加载性能。Charles 特别擅长在 HTTPS 加密连接中解密数据,因此也广泛用于分析和抓取移动应用程序的网络请求。
而 Sniffmaster(抓包大师)则是另一款强大的网络抓包工具,专注于网络流量的捕获与分析。与 Charles 类似,Sniffmaster 也支持 HTTP 和 HTTPS 抓包,并且提供了丰富的功能来帮助开发者调试网络请求、分析数据流以及优化应用性能。两者的结合可以为开发者提供更全面的网络调试解决方案。
Charles 的主要功能:
-
HTTP 和 HTTPS 抓包:
- 能够捕获和显示所有 HTTP 和 HTTPS 网络请求及响应的内容,包含请求头、响应体、Cookie、查询参数、状态码等信息。
-
SSL 解密:
- 支持解密 HTTPS 流量,通过安装信任的 Charles 根证书,可以查看加密传输的内容,如 API 返回的数据或网页的内容。
-
模拟网络环境:
- 可以模拟慢速网络(如 3G、2G)环境,帮助开发人员分析和优化应用在低速网络下的性能。
-
断点调试(Breakpoints):
- 支持在请求和响应时设置断点,开发者可以在发送请求或接收响应前进行手动修改,便于调试网络请求和接口。
-
带宽限制:
- Charles 可以限制网络带宽,通过模拟带宽受限的场景,分析应用程序在不同网络条件下的表现。
-
重放请求:
- 通过 Charles 可以重放之前的请求,用于测试同一请求的不同响应情况。
-
跨平台支持:
- 支持多种操作系统,包括 Windows、macOS 和 Linux。
Sniffmaster 的主要功能:
-
实时流量监控:
- Sniffmaster 提供实时网络流量监控功能,能够捕获并显示当前网络中的所有数据包,帮助开发者快速定位问题。
-
深度数据包分析:
- 支持对捕获的数据包进行深度分析,包括协议解析、数据包重组等功能,帮助开发者深入了解网络通信细节。
-
自定义过滤规则:
- Sniffmaster 允许用户自定义过滤规则,只捕获特定协议或特定 IP 地址的流量,减少无关数据的干扰。
-
多平台支持:
- 与 Charles 类似,Sniffmaster 也支持多种操作系统,包括 Windows、macOS 和 Linux。
Charles 的工作原理
Charles 通过充当**代理服务器(Proxy Server)**的角色,拦截网络请求和响应流量。它位于客户端(如浏览器、移动应用)和服务器之间,截取网络请求并对其进行显示和分析。
具体工作过程如下:
-
代理配置:
- 首先,用户需要将 Charles 设置为代理服务器,Charles 会监听指定端口(默认 8888)。用户需要在操作系统或应用程序中配置代理,使得所有网络请求都通过 Charles。
-
截取请求和响应:
- 当客户端发送 HTTP/HTTPS 请求时,Charles 作为代理服务器拦截请求,将其发送到目标服务器。
- 服务器返回响应后,Charles 同样拦截响应并展示给用户查看,之后再将响应返回给客户端。
-
HTTPS 流量解密:
- 为了解密 HTTPS 请求,Charles 利用“中间人攻击(Man-in-the-Middle, MITM)”技术。它通过伪造服务器证书,使得客户端相信 Charles 是服务器端,从而解密加密的请求和响应内容。
- 要实现这个功能,用户需要在客户端(如浏览器、移动设备)上安装 Charles 的根证书,并信任它,Charles 才能对 HTTPS 流量进行解密和抓取。
-
展示网络信息:
- Charles 会将所有的网络请求及响应信息,包括 headers、body、状态码、Cookie 等,以树状结构展示在工具界面中,用户可以轻松地分析和查看请求的详细内容。
常见的使用场景:
-
调试移动应用程序的网络请求:
- 通过设置手机代理并安装 Charles 证书,开发者可以查看移动应用发出的网络请求和服务器响应。
-
API 调试与测试:
- Charles 可以查看和重放 API 请求,帮助开发者快速发现和调试接口问题。
-
前端开发:
- 前端开发人员可以用 Charles 查看浏览器发出的 HTTP 请求,分析资源加载速度和优化页面性能。
-
网络安全分析:
- 通过抓取和分析网络流量,可以检测可能的安全漏洞和数据泄露。
小结:
Charles 和 Sniffmaster 都是功能强大的代理抓包工具,帮助开发者全面分析网络流量,尤其是 HTTPS 请求。通过它们的代理模式和 SSL 解密功能,开发者可以捕获应用和网页的所有流量,便于进行调试和优化网络请求。
二、Charles下载安装
Charles 支持多种操作系统,包括 Windows、macOS 和 Linux。你可以从官方网站下载最新版本的 Charles。
三、环境配置
1. 抓取 HTTP 请求
前提条件:手机和 PC 端需要处于同一 WiFi 网络下。
- PC 端 Charles 软件处于开启状态。
- 手机配置 Charles 作为代理:在手机连接的 WiFi 网络的高级设置中(不同手机配置入口会有不同),找到代理服务器,选择【手动】,代理主机名填写 PC 端的局域网 IP(192.168 开头的 IP 地址)。代理服务端端口填写 Charles 的端口,默认是 8888,点击保存。
- 代理设置保存成功后,电脑会出现允许代理的提示,点击 Allow 即可。
- 进入 Proxy -> Proxy Setting,勾选 Enable transparent HTTP proxying(可以抓取移动设备的数据包)。
到此处表示可以抓取手机的 HTTP 请求了,如果想抓取 HTTPS 的请求,还需要继续往下设置。
2. 抓取 HTTPS 请求
- 在 Charles 中,进入 Proxy -> SSL Proxying Settings,勾选 Enable SSL Proxying。
- 配置完这时候抓手机的 HTTPS 请求还是 unknown,还需要电脑和手机安装 SSL CA 证书。
Mac 系统安装证书
- Help -> SSL Proxying -> Install Charles Root Certificate
- 进入钥匙串
- 信任证书(注意:选择始终信任)
Windows 系统安装证书
- Help -> SSL Proxying -> Install Charles Root Certificate
- 进入证书导入向导,点击安装证书
- 选择本地计算机,点击下一步按钮
- 将所有的证书都放入下列存储,点击浏览按钮
- 点击受信任的根证书颁发机构,点击确定按钮
- 一直点击下一步
- 出现安全警告时点击是
- 显示导入成功
手机安装证书
- 在手机自带的浏览器中输入
chls.pro/ssl。 - 此时会下载 xxx.crt 文件,然后我们安装此证书,安装类型为 CA 证书。此时安装的证书是用户级别的,在 Android 6.0 及以下系统可以抓包,而 Android 7.0 及以上系统不能再抓包了,因为 Android 7.0 及以上系统版本新增了证书验证,应用默认不允许信任用户自定义的 CA 证书(如 Charles 的代理证书),所以 app 内不再像原来一样默认信任用户的证书了。
解决方法有三个:
方法 1:如果抓包 APP 有源码可以自己打包的话,可以在源码中增加 network-security-config 网络安全配置来允许应用信任用户自定义证书。
方法 2:对手机进行 root,将 Charles 的安全证书升级为系统级别的证书。
方法 3:参考相关技术文档进行配置。
如果需要使用 VPN 工具连接代理,只需要 PC 和移动端处于同一 WiFi 网络下,PC 端使用 Connect VPN 连接其他 VPN 即可。