Charles 抓包工具使用指南:设置、功能详解与最佳实践

引言

前段时间入职了一家公司,项目中的代码注释比较少,而且代码量大,比较难以理解每个接口的数据情况。为了分析接口的行为,我们需要安装项目测试环境包,并通过抓包来查看请求参数和header,借此来理解代码逻辑。我选择了使用Charles配合模拟器进行抓包调试。今天我来总结一下Charles的用法以及结合模拟器的简单使用。

Charles与Sniffmaster

Charles是一款强大的抓包调试工具,相信做Android和Apple开发的同事会经常用到。我平时在PC端抓包接口也经常用Charles。Charles对移动端的支持非常友好,能够方便地与模拟器或真实设备结合,帮助开发者分析app的网络流量。它不仅支持HTTP请求,还可以通过SSL Proxying解密HTTPS流量,让开发者可以查看加密的数据。

除了Charles,我还发现了一款非常实用的抓包工具——Sniffmaster。Sniffmaster是一款轻量级的抓包工具,特别适合在移动端进行网络流量分析。它支持HTTP/HTTPS抓包,并且能够实时监控网络请求,帮助开发者快速定位问题。与Charles相比,Sniffmaster更加轻便,适合在资源有限的设备上使用。

Charles的主要功能

  1. 抓包功能

    • HTTP/HTTPS抓包:Charles能够自动捕获HTTP和HTTPS请求。通过SSL Proxying功能,Charles可以解密HTTPS流量,使我们能够查看加密的请求内容。
    • 请求和响应分析:Charles支持格式化查看请求和响应数据,比如JSON、XML,方便阅读和分析。同时支持搜索功能,可以快速找到特定的字段。
  2. 修改请求和响应

    • 重发请求 (Repeat):可以选择任意一个请求重新发送,以测试多次请求的效果。
    • 编辑和重发 (Edit and Resend):允许我们在重发请求前修改参数、头部等信息,便于测试不同的请求情况。
    • 构建自定义请求 (Compose):Charles还允许我们手动创建新请求,用于模拟特定网络请求来测试服务器响应。
  3. 断点调试 (Breakpoints)

    • 设置断点:可以在特定请求上设置断点,使请求在发送或响应返回前暂停。这时候我们可以查看和修改请求或响应的内容。断点调试在模拟服务器响应、验证客户端处理逻辑等场景中特别有用。
  4. 流量控制 (Throttling)

    • 限速:Charles支持网络限速,可以模拟不同的网络条件(如3G、4G)。这在测试应用在低网速下的表现非常有帮助,比如检查页面加载速度、响应时间等。
    • 断开连接:可以选择断开会话连接,模拟网络中断的情况,用于测试应用在断网时的表现。
  5. 会话记录和保存

    • 会话保存:Charles可以保存当前会话记录,方便后续分析。可以选择保存为.chls文件,也可以导出为.har等格式,便于在其他工具中查看。
    • 会话过滤:Charles支持按域名、请求类型等条件过滤会话,帮助我们聚焦在特定的请求和响应上,避免干扰。
  6. Map Remote和Map Local功能

    • Map Remote:允许将请求重定向到不同的远程服务器,这对于测试不同环境(如开发环境和生产环境)非常有用。
    • Map Local:可以将请求映射到本地文件,模拟服务器返回的响应。这样在本地就可以测试特定的数据格式,而无需依赖真实服务器。
  7. 外部工具集成和设置

    • Charles可以导出会话记录,适配其他调试和分析工具(如Postman)。还可以配置代理、DNS和访问控制等设置,以满足复杂的网络调试需求。

Charles对移动端调试的支持非常友好,可以通过代理和SSL解密轻松捕获app发出的网络请求。此外,Charles的断点、限速等功能也能帮助我们模拟真实的网络环境,提升调试效率。这些特点使Charles成为移动端开发者的理想选择,特别是在没有接口文档的情况下,通过抓包可以直观地查看请求参数和响应格式,为理解代码逻辑提供极大帮助。

Sniffmaster的优势

与Charles相比,Sniffmaster在移动端的表现尤为出色。它支持实时监控网络请求,并且能够自动识别HTTP/HTTPS流量,帮助开发者快速定位问题。Sniffmaster的界面简洁,操作简单,特别适合在移动端进行快速调试。此外,Sniffmaster还支持多设备同时抓包,方便开发者在多设备环境下进行网络流量分析。

Charles的下载与安装

要开始使用Charles,我们首先需要完成下载和安装。以下是具体步骤:

  1. 下载Charles

    • 访问Charles的官方网站www.charlesproxy.com。
    • 在首页点击“Download”按钮,根据操作系统(Windows或macOS)选择对应的安装包进行下载。
  2. 安装Charles

    • 在Windows上安装:双击下载的安装包,按照安装向导的提示进行安装。一般情况下,可以选择默认的安装目录。安装完成后,在桌面或开始菜单中找到Charles,双击打开即可。
    • 在macOS上安装:双击下载的.dmg文件,将Charles图标拖入“应用程序”文件夹中。安装完成后,可以在“应用程序”中找到Charles并打开。
  3. 第一次运行Charles

    • 第一次启动Charles时,系统可能会提示请求网络权限,请点击“允许”,以便Charles能够正常工作。
    • Charles可能会弹出SSL Proxying相关的提示,询问是否安装根证书。可以暂时跳过这一步,后续我们会详细讲解如何安装SSL证书以抓取HTTPS流量。
  4. 设置Charles的界面语言(可选)

    • Charles默认是英文界面,如果习惯使用英文可以保持默认设置。如果需要其他语言,可以在设置中调整(不过目前Charles主要支持英文界面)。

Charles主界面功能

Charles的主界面主要分为以下几个部分:

工具导航栏
  • 扫帚图标(Clear Session):清除当前会话的记录。点击此图标后,Charles界面中显示的所有请求和响应记录都会被清空,方便用户在新的会话中开始抓包分析。
  • 红色圆圈(Record/Stop):控制Charles的抓包功能。红色圆圈表示Charles正在记录网络请求(即抓包功能已启动)。此时,所有网络请求和响应都会被捕获并显示在会话列表中。灰色圆圈表示Charles的抓包功能已停止。此时,Charles不会记录任何网络请求或响应。
  • 锁图标(SSL Proxying):控制SSL解密功能。点击此图标可以启用或禁用SSL Proxying功能。启用后,Charles将可以解密HTTPS流量,方便用户查看加密请求的数据内容。
  • 乌龟图标(Throttling):启用或禁用限速功能(Throttling)。开启限速功能后,Charles可以模拟不同的网络环境(如3G、4G、Wi-Fi),方便测试应用在不同网络速度下的表现。
  • 六边形图标(Breakpoints):启用或禁用断点功能。当该功能启用时,Charles会在请求发送前或响应返回前暂停,允许用户查看并修改请求或响应的内容,适合调试和测试不同的返回值。
  • 钢笔图标(Edit/Compose):进入编辑和重发模式。此功能允许用户选择一个已捕获的请求,并在重新发送前编辑请求的URL、参数和头部信息,或者直接创建一个新请求。
  • 旋转箭头(Repeat):重复发送选定的请求。可以用来测试同一请求的多次发送效果,方便测试服务器的稳定性和响应一致性。
  • 绿色勾图标(Auto-Respond):启用自动响应功能。配置后,Charles可以对符合特定条件的请求自动返回预设的响应内容,适用于本地调试和离线开发。
  • 扳手与螺丝刀图标(Settings/Tools):打开Charles的设置和工具选项。点击后可以进入Charles的配置界面,进一步设置代理、SSL、限速等功能的详细参数。
  • 齿轮图标(Proxy Settings):进入Charles的代理设置。通常用于设置Charles的代理端口和监听IP地址,以确保Charles能够正确捕获到所需的网络流量。

这些图标和按钮是Charles主界面中最常用的工具,能够帮助用户灵活控制抓包、限速、断点调试等功能,让网络调试过程更加高效。

主界面视图

Charles左侧有两个查看封包的视图,分别名为StructureSequence

  • Structure(结构视图):以层次结构(树状结构)显示捕获到的网络请求,通常按域名和路径进行分组。结构视图可以帮助用户从域名和路径的角度快速找到特定的请求,非常适合查看来自同一域名的所有请求或浏览接口的层次结构。
  • Sequence(顺序视图):按时间顺序显示所有捕获到的请求,最新的请求会显示在列表的底部(或顶部,视设置而定)。顺序视图更适合查看请求的时间顺序,帮助分析请求的执行顺序和响应时间。

通过在StructureSequence之间切换,可以方便地以不同的方式查看和组织Charles捕获到的请求,以满足不同的调试需求。

Charles的菜单栏介绍

Charles的菜单栏包含了各种功能选项,是我们进行抓包设置、调试和控制的主要入口。其中我们用的最多的就是ProxyTools这两个菜单。稍后调试也是需要操作这两个菜单,我先介绍下各个菜单项的功能和用法:

1. File菜单
  • New Session (⌘N):开启新的会话,开始新的抓包记录。
  • Open Session… (⌘O):打开已保存的会话文件(通常为.chls)。
  • Clear Session (⌘⌥X):清除当前会话的所有记录。
  • Close Session (⌘W):关闭当前会话窗口。
  • Save Session (⌘S):保存当前会话记录。
  • Save Session As… (⇧⌘S):另存当前会话记录。
  • Import…:导入会话数据,支持.har.xml等格式。
  • Export Session…:导出当前会话数据,支持多种文件格式。
2. Edit菜单
  • Cut/Copy/Paste:用于剪切、复制和粘贴请求数据。
  • Select All (⌘A):选择所有会话记录。
  • Find… (⌘F):在请求和响应中查找内容。
  • Find Next (⌘G)和Find Previous (⇧⌘G):查找下一个或上一个匹配项。
3. View菜单
  • Structure / Sequence:切换为结构视图或顺序视图。
  • Overview (⌘1)、Summary (⌘2)、Chart (⌘3):显示不同的统计和图表视图,帮助分析请求分布和流量。
  • Highlight Rules…:配置高亮规则,便于快速识别特定类型的请求。
  • Focused Hosts…:聚焦于特定主机的请求。
  • Viewer Mappings…:设置查看器的映射方式,以便不同类型数据有合适的显示方式。
  • Protobuf Settings…:配置Protobuf解析设置,适用于解析Protobuf数据格式。
4. Proxy菜单
  • Start/Stop Recording:控制会话记录的启动和停止。
  • Stop SSL Proxying:启用或停用SSL解密。
  • Start Throttling:启用限速功能。
  • Enable Breakpoints:启用断点调试功能。
  • Recording Settings…:配置录制设置。
  • SSL Proxying Settings…:配置SSL解密的域名设置。
  • Throttle Settings…:设置网络限速参数。
  • Breakpoint Settings…:配置断点设置条件。
  • Reverse Proxies…:设置反向代理。
  • Port Forwarding…:配置端口转发。
  • macOS Proxy:将Charles设置为macOS系统代理,捕获所有系统流量。
  • Proxy Settings…:设置代理端口和IP。
  • DNS Settings…:自定义DNS解析。
  • Access Control Settings…:控制哪些IP可以访问Charles。
  • External Proxy Settings…:设置外部代理服务器。
  • External DNS Resolver Settings…:配置外部DNS解析器。
  • Web Interface Settings…:设置Web界面访问配置。
5. Tools菜单
  • No Caching…:禁用缓存,确保每个请求都直接发往服务器。
  • Block Cookies…:禁用Cookie,便于测试无Cookie情况。
  • Map Remote…:将请求重定向到其他服务器,便于环境切换。
  • Map Local…:将请求映射到本地文件,适合离线调试。
  • Rewrite…:修改请求或响应数据。
  • Block List… / Allow List…:配置阻止和允许的请求列表。
  • DNS Spoofing…:将域名解析到特定IP,适用于测试不同服务器。
  • Mirror…:镜像流量,用于流量备份。
  • Auto Save…:自动保存会话。
  • Client Process…:设置客户端进程。
  • Compose / Compose New…:手动创建新的请求。
  • Repeat / Advanced Repeat:重复请求或配置高级重复请求。
  • Validate:验证请求。
  • Publish Gist:发布请求数据到Gist。
  • Import/Export Settings…:导入和导出配置。
  • Profiles…:管理Charles配置文件。
  • Publish Gist Settings…:配置发布到Gist的设置。
6. Window菜单
  • Session:查看当前会话窗口。
  • Error Log:查看Charles的错误日志。
  • Active Connections:查看活动的连接。
  • Toggle Full Screen (⌘F):切换全屏模式。
7. Help菜单
  • Registered to…:显示当前注册状态和注册信息。
  • Unregister Charles…:取消Charles的注册状态。
  • About Java:查看Java相关信息。
  • Local IP Address:查看本地IP地址。
  • SSL Proxying:帮助安装SSL证书。
  • Check for Updates:检查Charles更新。
  • Visit Website:访问Charles官方网站。

通过Charles进行PC端抓包

  1. 开启系统代理

    • 在Charles中,进入Proxy菜单,根据操作系统选择代理模式:
      • Mac:选择macOS Proxy,Charles会自动设置为macOS系统的全局代理。
      • Windows:选择Windows Proxy,Charles会自动设置为Windows系统的全局代理。
    • 启用后,Charles可以捕获系统内所有通过网络的请求,覆盖所有PC端的应用程序流量。
  2. 抓取HTTPS请求

    • 安装Charles根证书:首次抓取HTTPS流量时,Charles需要SSL证书来解密HTTPS数据。进入Help > SSL Proxying > Install Charles Root Certificate
    • 信任证书
      • macOS:在“钥匙串访问”中找到Charles证书,右键设置为“始终信任”。
      • Windows:在“证书管理器”中安装并信任Charles根证书。
    • 配置SSL解密:在Charles中进入Proxy > SSL Proxying Settings,点击Add添加解密规则。Host填写*Port填写443,表示对所有HTTPS请求进行解密。
  3. 开始抓包

    • 点击工具栏上的Record(红色圆点)按钮,开始记录网络流量。
    • Charles会自动显示所有通过的请求,包括HTTP和HTTPS请求。

通过Charles进行移动端抓包

  1. 设置Charles代理

    • 获取Charles的IP地址:在Charles中,进入Help > Local IP Address,查看当前设备的IP地址(例如192.168.1.X)。
    • 在移动设备上设置代理
      1. 确保移动设备和Charles运行的电脑连接到同一Wi-Fi网络。
      2. 在移动设备的Wi-Fi设置中,找到当前连接的网络。
      3. 进入网络的代理设置(通常在网络详情页中):
        • 设置代理类型为手动
        • 服务器填写Charles的IP地址。
        • 端口填写Charles的代理端口(默认是8888)。
  2. 配置HTTPS抓包(SSL证书安装)

    • 在移动设备上安装Charles SSL证书
      1. 在移动设备的浏览器中,访问chls.pro/sslcharlesproxy.com/getssl(Charles提供的证书下载链接)。
      2. 下载并安装Charles的SSL证书。
      3. 信任证书
        • iOS:在设置 > 通用 > 关于本机 > 证书信任设置中找到Charles证书并启用信任。
        • Android:证书安装完成后,进入设置 > 安全,确保启用了证书信任(具体路径可能会根据设备有所不同)。
    • 启用Charles的SSL解密:在Charles中,进入Proxy > SSL Proxying Settings。点击Add,在Host中填写*Port填写443,以便解密所有HTTPS流量。
  3. 开始抓包

    • 启动抓包:在Charles中点击Record(红色圆点)按钮。
    • Charles会自动捕获移动设备上的HTTP和HTTPS请求。每个请求将显示在Charles界面上,您可以查看其详细信息,包括请求头、响应内容等。

Sniffmaster的使用

与Charles类似,Sniffmaster也可以用于抓取移动端的网络流量。它的优势在于轻量级和实时监控功能。Sniffmaster支持HTTP/HTTPS抓包,并且能够自动识别加密流量,帮助开发者快速定位问题。Sniffmaster的界面简洁,操作简单,特别适合在移动端进行快速调试。

总结

Charles和Sniffmaster都是非常强大的抓包工具,适用于不同的场景。Charles适合在PC端和移动端进行复杂的网络调试,而Sniffmaster则更适合在移动端进行快速调试和实时监控。无论是Charles还是Sniffmaster,它们都能帮助开发者更好地理解网络请求的行为,提升调试效率。

你可能感兴趣的:(http,udp,https,websocket,网络安全,网络协议,tcp/ip)