美文网首页
Charles抓包

Charles抓包

作者: 主音King | 来源:发表于2020-10-27 13:26 被阅读0次

    版本:v4.5.6
    获取http请求

    对mac进行代理

    Proxy-->macOS Proxy打开代理,使得Mac上所有请求都通过Charles进行代理。


    image.png

    Proxy-->Proxy Setting设置监听端口号:8888


    image.png
    image.png

    获取电脑ip地址:Help-->Local Ip Address


    image.png
    image.png

    手机连击wifi,手机和电脑连接必须在同一个wifi下,然后手机连接代理


    image.png

    设置完成后,手机打开一个网址,charles就可以获取手机访问的包了。

    charles获取https请求

    http我们可以获取,但是网站是https的,如果想解析https包,就需要安装证书了。
    Help-->SSL Proxying-->install Charles Root Certificate,首先在mac安装CA证书。


    image.png

    然后始终信任该证书:


    image.png

    Help-->SSL Proxying-->Install Charles Root Certificate On...,然后生成手机证书。


    image.png

    Help-->SSl Proxying-->Save...,然后保存该证书,会生成类似Charles-ssl-proxying.pem文件,把该文件后缀改为.crt,然后发送到Android手机,进行安装即可。

    配置SSL代理:


    image.png
    image.png

    添加要监听的域名,支持*通配符,端口一般443

    在Android7.0手机获取https接口会出现unknown情况。系统不再信任用户导入的证书,自己项目里的自签名证书也会不受信任。这样导致,抓包软件可能抓不到https请求。如果你的证书不是ca证书,是自签名的证书,将无法请求服务器。谷歌在开发者文档上推荐解决方案:https://developer.android.google.cn/training/articles/security-config

    image.png
    1、在项目目录main/res/xml下新建network-security-config.xml文件
    2、在AndroidManifest.xml文件下的application节点添加
    android:networkSecurityConfig="@xml/network_security_config"
    

    3、charles.pem是从Charles-ssl-proxying-certificate.crt复制的内容(用文本打开),放到项目raw/charles.pem下

    创建network_security_config.xml
    在res文件夹下创建xml文件夹,在xml文件下创建network_security_config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config>
            <domain includeSubdomains="true">baidu.com</domain>
            <trust-anchors>
                <certificates src="@raw/charles" />
            </trust-anchors>
        </domain-config>
    
        <domain-config>
            <domain includeSubdomains="true">tabao.com</domain>
            <trust-anchors>
                <certificates src="@raw/charles" />
            </trust-anchors>
        </domain-config>
    
        <debug-overrides>
            <trust-anchors>
                <certificates src="user" />
            </trust-anchors>
        </debug-overrides>
    
    </network-security-config>
    

    通过配置多个domain字段,把测试环境域名加上,过滤正式环境域名。这样只抓去测试环境域名。如果debug下抓正式环境的数据,在domain-config添加debug-overrides节点。这样只在debug下才能抓包

    <network-security-config>
        <domain-config>
            <debug-overrides>
                <domain includeSubdomains="true">正式环境域名</domain>
            </debug-overrides>
            <domain includeSubdomains="false">测试环境域名</domain>
            <trust-anchors>
                <certificates src="user"/>
            </trust-anchors>
        </domain-config>
    </network-security-config>
    

    通过在gradle配置里面设置一个boolean值来区分测试包还是正式包,如果是测试包,那么添加这个net_config的配置,否则正式包不配置
    比如你的环境有如下域名 test.csdn.com,dev.csdn.com,uat.csdn.com, 那么 你只要添加csdn.com就能把这三个域名都包含进来。注意includeSubdomains必须为true才是模糊匹配,否则是精确匹配

    Charles断点

    选中要抓包的url,然后右键选择Breakpoints
    然后在请求这个地址,会出现两次断点,第一次是请求断点用来修改请求参数;


    image.png

    第二次是请求回调断点,用来修改返回结果。
    在Edit Response中可以对服务器返回内容进行修改。点击”Execute”进行提交。
    可以很方便的用户修改后台数据的返回信息和请求参数等。

    相关文章

      网友评论

          本文标题:Charles抓包

          本文链接:https://www.haomeiwen.com/subject/qhmtvktx.html