zoukankan      html  css  js  c++  java
  • Charles 抓包简介

    Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接Charles的代理访问互联网时,Charles可以监控这个程序发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request, response和HTTP headers (包含cookies与caching信息)。

    Charles主要功能:

    1. 支持SSL代理。可以截取分析SSL的请求。

    2. 支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。

    3. 支持AJAX调试。可以自动将json或xml数据格式化,方便查看。

    4. 支持AMF调试。可以将Flash Remoting 或 Flex Remoting信息格式化,方便查看。

    5. 支持重发网络请求,方便后端调试。

    6. 支持修改网络请求参数。

    7. 支持网络请求的截获并动态修改。

    8. 检查HTML,CSS和RSS内容是否符合W3C标准。

    Charles安装:

        去Charles的官方网站(http://www.charlesproxy.com)下载最新版的相应操作系统的Charles安装包安装即可。

        Charles是收费软件,可以免费试用30天。网上有很多破解版,推荐个好的网站:http://www.sdifen.com/

    Charles的功能很强大,我们这里只介绍几个常用的并且非常实用的功能:

        1. 将Charles设置成系统代理

        2. 截取移动设备上的网络请求包

            2.1手动重复请求(Repeat,Advanced  Repeat)

            2.2手动模拟请求(Compose)

            2.3修改网络请求内容(Compose)

        3. 过滤网络请求

        4. 代理转发

        5. 支持https请求抓包(如果配置了还是抓不到,下面有解决方案)

    Charles 主要提供两种查看封包的视图,分别名为 “Structure” 和 “Sequence”。

        1. Structure 视图将网络请求按访问的域名分类。

        2. Sequence 视图将网络请求按访问的时间排序。

    配置和使用:

    一. 将Charles设置成系统代理

    Charles 是通过将自己设置成代理服务器来完成抓包的,勾选系统代理后,系统本地发出去的请求都能被截取下来。如果只抓取APP的包的话,可关闭此配置,这样不会出现太多的数据看着比较乱。

    Mac

    Windows:

     
     
     

       需要注意的是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置,而 Charles 是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 Chrome 和 Firefox 浏览器的网络通讯内容。如果你需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。

    二. 截取移动设备上的网络请求包 

    我们在调试移动APP时,需要抓取APP发送的数据包,首先进行设置,Proxy -> Proxy Settings默认端口是8888,根据实际情况可修改。

     
     
     

    查看本机IP地址:Help -> Local IP Addresses

     
     
     

    然后配置手机代理:

    IOS和Android配置差不多 

     
     
     

    打开要调试的APP,请求就会先发送到Charles,然后验证是否允许访问。 

    当点击允许后,可以在Proxy -> Access Control Settings里看到可以访问此代理服务器列表 

     
     

    注意

    如果不小心点击了拒绝,可以手动添加手机IP/Mac地址到允许访问列表,或者重启Charles,手机再次访问,会再次提示选择。

    如果不想每换一个手机都要进行验证,可以配置允许所有手机访问,加入 

    0.0.0.0/0(IPv4)或::/0(IPv6)

    现在就可以抓包了,拿一款APP来做测试:


     
     
     
     
     

    三. 过滤网络请求

    通常情况下,网络请求是非常大量的,从几十个请求里找到我们需要的观察的某个请求比较费时,那么我们就需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。有两种方法: 

    1. 在Sequence界面的中部的Filter栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:*.leautolink.com,那么只需要在Filter栏中填入leautolink即可。(一般用于临时过滤)

     
     

    2. 在Charles的菜单栏选择"Proxy"->"Recording Settings",然后选择Include栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。如下图所示:(固定过滤地址) 

     
     

    四. 代理转发 

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

    请求转发,把调用方调用的地址转发到你本机地址的程序进行执行。

     
     

     

    并且配置Tools -> Map Romote 

    运行APP

     

    五. Https请求抓包

    默认我们是看不到https的请求数据的。我们需要安装证书。 

     
     

    Mac:

     
     
     
     

    双击打开Charles Proxy CA 

     
     
     
     
    手机配置完代理(必须的操作)后,浏览器打开http://chls.pro/ssl
     
     

    然后配置Proxy -> SSL Proxying Settings... 添加要抓取的https请求

    然后再次请求:

     
     
     

    如果不再使用Charles,想删除手机里的证书文件怎么删除呢?

    设置->通用->描述文件与设备管理,删除指定的证书即可

     
     

    Windows: 

     

    下一步 

    然后继续下一步直到导入成功。

     

    剩下的配置与Max下配置相同。

    SSL的问题:

         最近iPhone系统更新到ios 10.3后,用Charles抓包竟然出现了一些问题,https的请求都会失败,提示错误信息为Failure SSLHandshake: Received fatal alert: unknown_ca 和You may need to configure your browser or application to trust the Charles Root Certificate. 然而之前任何问题都没有,并且相关设置都正确:电脑上安装了Charles的根证书,并且设置了始终信任,然后手机上也登录了http://chls.pro/ssl安装了描述文件,一切都按正常程序走的,但是错误始终无法解决.

    原因:

         虽然charles的根证书已经在安装列表中显示,但它是被关闭的。在iOS 10.3之前,当你将安装一个自定义证书,iOS会默认信任,不需要进一步的设置。而iOS 10.3之后,安装新的自定义证书默认是不受信任的。如果要信任已安装的自定义证书,需要手动打开开关以信任证书。

    解决:

      设置->通用->关于本机->证书信任设置-> 找到charles proxy custom root certificate然后信任该证书即可.

     
     
     

    Windows系统无法上网的问题

        在windows下,如果Charles没有正常关闭,或者系统重启后无法上网的问题,因为Charles做了系统代理,当上网的时候,首先先访问代理服务器,然后代理再去链接网络,这时候Charles是非正常关闭的,只要重新打开Charles即可上网正常,正常关闭Charles后同样没问题。

    ## 其他高级功能 ##

    一、断点调试

    添加Charles断点
     
    1、用Charles抓包发起一次接口请求

    2、对要打断点的接口右键,选择【Breakpoints】

    Charles断点设置
    1、点击Charles菜单-【Proxy】-【Breakpoint...】,此时会弹出【BreakpointsSettings】对话框
    2、双击【Location】内的接口地址,此时会弹出【Edit Breakpoint】对话框
    3、在【Query】项输入:*
    4、如果我只需要修改返回的参数,就只勾选【Response】
     
     
    修改接口返回值
    1、再次发起接口请求,此时会弹出下面的对话框
    2、点击【Edit Response】,修改返回的报文
    3、点击底部的【Execute】将修改后的报文返回

      

    简单教程:https://blog.csdn.net/mxw2552261/article/details/78645118 

    入门到精通:https://blog.devtang.com/2015/11/14/charles-introduction/ 

  • 相关阅读:
    postfix队列管理
    fdisk添加磁盘
    postfix日志分析pflogsumm
    ioctl接口内容操作
    linux 路由表设置 之 route 指令详解
    手把手教你用 Strace 诊断问题
    rtsp学习----海康RTSP客户端连接深入分析
    栈回溯技术
    objdump命令
    linux中的strip命令简介------给文件脱衣服
  • 原文地址:https://www.cnblogs.com/saytome/p/10036606.html
Copyright © 2011-2022 走看看