macOS下安装与配置网络抓包工具Charles入门教程

charles抓包工具是基于HTTP请求中间人代理,通过和服务端、客户端建立通信将客户端的请求数据发送服务器,并将响应数据传输给客户端,实现抓包记录,最最最...我想推荐的原因是...它很简洁...这很苹果
005HV6Avgy1h7943v0e35j31520hsdu3.jpg

下载安装 

charles支持windows、macOS、linux等多个版本

进入charles的官网,进入DownloadTab页,可以看到下面有多个系统版本可供下载,选择适合自己系统的点击,即可下载。

最下面还展示了下载firefox插件,看描述的意思是firefox旧版本可能会需要下载charles的插件来支持抓包,新版本就不需要下载了,大家可以根据自己的环境进行配置。这里作者是macOS,就安装了mac版,以下内容都以mac版charles作为基础,windows基本一样。
005HV6Avgy1h794f49qczj31800uy4dg.jpg

面板介绍 

005HV6Avgy1h795v729hmj310u0og4d0.jpg

可以将charles的分为以下几个模块:

  • 菜单栏:一些全局相关的配置,如:偏好设置、记录显示与编辑、记录展示方式、代理配置、常用的工具、帮助等等
  • 工具栏:快捷设置菜单,如:清除记录、开关记录、开启弱网、断点设置、执行请求、重新请求等等
  • 抓包记录:显示抓包的记录,可以以域名归类记录也可以按请求顺序展示记录,单击会显示右侧的详情面板,右击有一些菜单功能
  • 请求详情:请求详情来显示当前请求的具体信息,如:请求头、响应主体、请求主体、TLS、Timing(一些请求连接时间)、size、状态码等等信息,还可以用不同类型格式查看请求或响应内容

接下来分别具体讲讲每个模块的使用

菜单栏 

菜单栏相对来说比较重要,它来控制charles全局,可以导入导出记录、设置记录查看方式、设置代理(重要)、常用工具、证书安装等等

  • File:可以导入导出记录,文件会以.chls后缀保存,这种功能可以将记录发给别人查看比较方便
  • Edit:复制粘贴记录,查找记录(可以根据正则,查找范围多个维度进行查找,比较好用),当然这些功能都有对应的快捷键,当熟悉以后就不需要这么麻烦了
  • View:一些和查看记录的配置有关 

    • 设置以Structure(用域名归纳请求,类似于嵌套文件夹,个人喜欢这种风格的)Sequence(请求顺序)来显示记录,推荐使用Structure,这个设置可以直接在记录面板点击即可
    • 高亮或者聚焦(会将其他请求折叠进一个文件夹)某个具体的请求,方便调试
    • 自定义请求的请求或响应的查看方式(不怎么用)
  • Proxy(重要):用来设置代理、网速、HTTPS、断点、DNS等等功能 

    • Start Throttling & Throttle Setting:用来模拟网速,弱网测试比较方便 005HV6Avgy1h797ldqxzjj30vc0z4gtg.jpg
    • Enable Breakpoints & Breakpoints Settings:用来设置断点请求,可以根据不同的域名、路径、请求方法等多个维度来设置,比较实用 005HV6Avgy1h797ur6yttj31lo0kqahr.jpg
    • Proxy Setting:用来设置HTTP、Socket代理,也可以设置系统代理。默认HTTP Proxy代理监听端口为8888,可以修改如7777。macOS可以设置启动设置为系统代理(目前高版本window都会默认设置为系统代理),默认这些都是开启的。 005HV6Avgy1h7980ya73aj30ya0ug79c.jpg 005HV6Avgy1h79812y8dwj30xg0ecwgh.jpg
    • Reverse Proxy:反向代理,可以将本地的请求反向代理到其他请求
    • DNS Setting:配置DNS
    • Access Control Setting:用来配置局域网中的其他机器代理规则,可以配置哪些ip允许代理,默认会允许所有ip代理的
  • Tools:一些请求相关配置工具,如:阻塞cookie、请求拦截代理、请求rewrite、执行请求等等功能 

    • Block Cookie:阻塞请求的cookie,可以自定义匹配地址来阻塞,下图模拟了当请求http://192.168.3.58:9999/cookiecookie会被拦截,而http://192.168.3.58:9999则不会 005HV6Avgy1h79fnv26ioj30ve0m8juo.jpg 005HV6Avgy1h79fo7viq0j315m0fyjw0.jpg 005HV6Avgy1h79fodzs7yj312u0fc42v.jpg
    • Map Remote & Map Local & Rewrite:用来拦截请求可以代理到其他地址也可以返回本地的文件等等,自己可以试试
    • Block List & Allow List:阻塞和允许指定的请求
    • Compose & Repeat:可以手动用charles来执行某个请求,可以指定并发数
  • help:用来安装证书,配置https的 005HV6Avgy1h79fyedjnwj31a40hs7m0.jpg

工具栏 

工具栏主要是一些快捷设置菜单栏,如:清除记录、开关抓包、ssl开关、网速配置、断点设置、手动请求、重新请求、一些配置等等,基本上在菜单栏已经介绍的差不多了,这里自己手动操作一遍就可以了 005HV6Avgy1h77z66zbt6j31460gumzr.jpg

抓包记录 

抓包记录是用来记录抓包的记录的,可以根据域名来归纳记录也可以使用请求顺序的方式展示记录,推荐使用域名归纳方式方便调试,一目了然;底部的Filter可以简单的过滤抓包记录,其他的高亮、聚焦展示前面已经讲过了。 005HV6Avgy1h79g6w1qwej30q80nctgf.jpg

抓包详情 

抓包详情通常就是我们用来分析返回来的内容和一些请求信息等,前端可以根据请求相关时间做一些优化 005HV6Avgy1h79gm4bechj314o0yiahy.jpg 005HV6Avgy1h79gma4ixjj31500y6ne7.jpg

请求代理与篡改 

请求代理与篡改可以参考菜单栏Tools中的Map Remote & Map Local & Rewrite等几个来调试,非常简单,这里就不介绍了

断点调试 

开启断点调试的条件:1.要勾选Enable Breakpoint 2.需要在Breakpoint Setting中勾选启用并且需要填写需要断点的域名,设置前面已经介绍了,忘记的可以前面查看。那么打了断点一般用来做什么,可以模拟请求时长、修改请求体和响应体等等。

这里设置断点http://192.168.3.58,当请求是这个域名时,就是命中断点,刷新浏览器发现已经命中断点

  1. 当前请求断点,查看请求体,也可以编辑请求内容 005HV6Avgy1h79h40gw64j31ju0xe10i.jpg
  2. GET请求手动添加两个字段,点击Execute执行下一步 005HV6Avgy1h79h47z9vvj31b80xugqz.jpg
  3. 当前为响应断点,可以看到刚刚添加的两个字段已经带上了,现在也可以编辑响应内容了  005HV6Avgy1h79h4elr6nj31fq0xugv2.jpg
  4. 编辑响应内容,删除了原来的返回数据,自定义一条数据  005HV6Avgy1h79h4mh80nj31dc0x6gsh.jpg
  5. 查看浏览器内容已经经结果修改了 005HV6Avgy1h79h4swgb3j31680wcaly.jpg

以上就是断点调试的基本使用,其他的可以根据自己的需求进行配置即可

弱网测试 

charles可以模拟不同的网络环境,很方便进行网速相关的测试如:超时、断网等等。这一点相比fiddler,charles内部已经内置了集中网络环境,而fiddler则需要改代码,不是很友好。

同样关于网络配置其前面已经讲述了,可以往上翻阅。需要注意的是,要开启Start Throttle和配置Throttle Setting

这里没有用内置的网络环境,自定义下载速率为5kb,已经相当慢了 005HV6Avgy1h79hnzga3wj30vc0z4agt.jpg  查看本地请求4s才完成,通过修改不同的网速可以模拟不同的网络环境 005HV6Avgy1h79hof3ko8j315003cjsb.jpg

配置HTTPS 

在没有配置HTTPS下,对于HTTPS请求的请求和响应数据无法解码都是乱码,需要配置了HTTPS后才能查看解码后的内容,下图是在没有配置HTTPS的情况下,抓取https://www.baidu.com地址的请求,全是乱码 005HV6Avgy1h79hu3emtyj31kw1507sk.jpg

配置HTTPS步骤

  1. Help > SSL Proxying > Install Charles Root Certificate,系统安装charles证书并信任
    1-0.png
    默认这个证书是不被信任的
    005HV6Avgy1h79hz6566rj314m0e679n.jpg
    双击打开它,将其设置为全部可信.
    2.png
  2. Proxy > SSL Proxying Settings > Enable SSL Proxying开启SSL Proxy,添加抓取的IP为*端口为443 005HV6Avgy1h79i4tyqqpj30y80rwq7z.jpg

再次查看抓取的HTTPS请求,已经完美解码了 005HV6Avgy1h79i627esuj31jm0y84qp.jpg

客户端抓包 

配置客户端抓包首先需要和主机在同一局域网下,并且基于HTTPS步骤,主要步骤如下:(这里以ios为例)

  1. 打开Safari输入charles地址192.168.3.58:7777,fiddler会弹出是否允许抓包当前ip(手机ip),点击允许,你也可以在Proxy > Access Control Setting中直接配置允许的ip,就不会有当前弹窗提示了 005HV6Avgy1h79jcz33ohj318m0amwi6.jpg
  2. 配置手机代理到charles  005HV6Avgy1h79jf076enj30n00p0wel.jpg
  3. 当前其实已经可以抓取手机包了,但是https请求还是有一些问题,因为没有在手机上安装charles证书。安装charles证书,点击Help > SSL Proxying > Install Charles Root Certificate On a Mobile Device...点击,会弹出手机的步骤,共两步,1.手机网络代理到charles和2.手机浏览器访问chls.pro/ssl来安装证书,上一步已经讲了配置手机代理,这里我们访问地址chls.pro/ssl来安装证书即可(如果你的手机浏览器打不开这个地址,请关闭电脑上的防火墙,如果关了防火墙还是不行,你看下是不是你的电脑设置了DoH,有它的话,也先暂停一下)
    005HV6Avgy1h79jg4n7u4j31aa0ow4ps.jpg
    005HV6Avgy1h79jhcded2j318m0begqm.jpg
    005HV6Avgy1h79jehmj65j30n00ti768.jpg
  4. 安装证书到系统,需要信任证书,输入手机密码等等,一直下一步即可
    005HV6Avgy1h79jfaysdfj30n00p40uj.jpg
  5. 关于手机 > 证书 > 信任证书信任刚刚添加的证书
    005HV6Avgy1h79jfk5uckj30n00g5765.jpg
  6. 打开Safari访问https://www.lvtao.net查看charles的抓包,发现已经抓包成功
    005HV6Avgy1h79jgr3mmaj31js0zqkbl.jpg

以上便是ios的配置抓包流程,其他手机系统大同小异


常见问题:

  1. 手机不能访问chls.pro/ssl,无法下载证书。 解决办法:关闭PC防火墙,如果有开启DoH也关闭
  2. 手机上请求https证书的网站不能解包数据。在iOS新版的系统中,需要在关于手机 > 证书 > 信任证书信任证书,否则会一直提示当前证书无法信任,也就不能正常获取。
  3. 安卓高版本无法安装证书的问题:

    • 3.1 PC上Charles软件中 Help > SSL Proxying > Save Charles Root Certificate...点击,将证书保存到硬盘上
    • 3.2 使用openssl命令计算charles-ssl-proxying-certificate文件(这个刚刚保存的文件)的hash值,openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem,像我本地的为e0e0666f openssl.png
    • 3.3 上一步计算得到hash值为e0e0666f,然后将charles-ssl-proxying-certificate.pem文件重命名为e0e0666f.0,因为android系统目录的证书名称规则就是这样的所以这样搞
    • 3.4 安装charles证书到安卓系统根目录/system/etc/security/cacerts/

附:adb安装CA证书文件

在macOS上安装adb软件,手机连接电脑(没有的话可以使用brew install --cask android-platform-tools安装,这样就会安装上 adb、etc1tool、fastboot、hprof-conv、make_f2fs、make_f2fs_casefold、mke2fs 这些工具啦)
a. adb devices 查看本地设备列表(设备ID device)
b. adb -s 设备ID root
c. adb -s 设备ID push e0e0666f.0 /system/etc/security/cacerts/
d. adb -s 设备ID shell
e. 进入到安卓shell之后,修改文件证书文件权限

su
chmod 644 /system/etc/security/cacerts/e0e0666f.0
ls -l /system/etc/security/cacerts/e0e0666f.0

这样就可以啦...

标签: 测试, 运维

相关文章

浏览器的开发工具中有个jsContext是什么

什么是 jsContext?在JavaScript中,jsContext 并不是一个官方的术语或概念。通常情况下,开发者可能会提到 context 这个词,它通常指的是执行上下文(Executi...

整理一些Docker运维中常用的命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。以下是一些在 Docker 运维中常...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件