用 Charles 抓 http/https 遇到 Connect 请求的疑问? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
XiaoXiaoMagician
V2EX    程序员

用 Charles 抓 http/https 遇到 Connect 请求的疑问?

  •  
  •   XiaoXiaoMagician 2023-03-02 22:54:52 +08:00 3892 次点击
    这是一个创建于 952 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于业务需要,抓了 PC 端几个游戏的登录接口调研流程。发现请求方法都是 Connect 和加密内容。 网上也查了相关资料,解释这种请求是隧道代理。

    但我不清楚的是,这些 http/https 的 Connect 请求是 Charles 代理软件转换成的吗? 还是说就是客户端内部代码检测代理的实现的逻辑?

    因为平常跟服务端对接大多情况都是用的 Get 和 Post 方法。这种方法基本没用过。

    有没有懂的大佬们解释一下这种防抓包的机制是怎么实现的? 个人认为可能是用的 私有证书 或是 自签名证书,直接在开发时下发给客户端后请求携带的样子。(纯属猜测)

    第 1 条附言    2023-03-03 11:23:13 +08:00
    附上抓包图片

    Charles:


    Wireshark:
    20 条回复    2024-12-03 14:45:01 +08:00
    shibo501c
        1
    shibo501c  
       2023-03-02 23:01:15 +08:00 via Android
    不光是 pc 端,现在大厂的 app 很多用 charles 抓请求也看不到了,很多是在 tcp 层自己做的 tls 加密,多 stream 复用,业务感觉发送的还是 http ,实际上被网络模块代理了。
    lasuar
        2
    lasuar  
       2023-03-02 23:03:00 +08:00
    HTTP 请求也是加密的话说明内容本身就是加密的,在客户端解密;
    HTTPS 请求抓包查看明文,需要在 charlers 安装根证书到系统并设置完全信任,然后 charlers 开启 ssl 代理,然后客户端设置代理为 charlers 代理地址,开始抓包。
    XiaoXiaoMagician
        3
    XiaoXiaoMagician  
    OP
       2023-03-02 23:24:52 +08:00
    @lasuar 已经装了证书了,也信任了。而且不是 Connect 请求应该是不携带 Body 内容的,为什么他们都是携带加密内容的?
    ryanbuu
        4
    ryanbuu  
       2023-03-03 01:02:13 +08:00 via iPhone
    app 本地启动一个 server ,称其为 tunServer ,用来接收 http/websocket 请求,并加密后发送到真正的服务端(realServer)。
    所以目前的访问流程就是:app->(127.0.0.1:xxxxx)tunServer->realServer 。手机上设置中使用代理连接到 charles ,流程变成了 app->[charles]->(127.0.0.1:xxxxx)此处访问不到,所以大概率 app 是不能正常使用的吧?因为 app 发送的请求目的地址是 127.0.0.1:xxxxx ,但是 charles 本地并没有相对应的端口开放用以交换数据。
    studyingss
        5
    studyingss  
       2023-03-03 01:38:07 +08:00 via Android
    还是学一下基础吧。。。

    http CONNECT 方法只是用来连接到一个 http 代理服务器,连接上之后可以中转 tcp 流量。

    CONNECT 只有第一个包
    studyingss
        6
    studyingss  
       2023-03-03 01:43:29 +08:00 via Android
    会带,server 接到之后会去跟目的地址建立连接,如果成功就回 200 Connection Established 。

    后面的数据都是纯 tcp 了,http 服务器只会做转发工作。看你的描述大概是认为每个请求都会带上 http connect 头。

    至于防抓包什么更是毫无关系,connect 本质上只是一个 tcp 隧道,如果传输的数据用了加密那不经过这个 tunnel 看到的也是加密的。
    lovelylain
        7
    lovelylain  
       2023-03-03 08:40:49 +08:00 via Android
    @q1angch0u 京东 APP 是哪种情况?我升级到新版
    lovelylain
        8
    lovelylain  
       2023-03-03 08:43:48 +08:00 via Android
    @q1angch0u 京东 APP 是哪种情况?我升级到新版后,无论是手机本地跑的代理还是路由器上跑的代理,只要设置了代理,京东就不正常,还有一些银行 APP 会提示开了代理不让用,京东是无任何提示,用这几个 APP 前得切换 WiFi 或者 APN ,太麻烦了。
    XiaoXiaoMagician
        9
    XiaoXiaoMagician  
    OP
       2023-03-03 10:01:16 +08:00
    @studyingss 那代理服务器这个是由客户端本地启动的,还是说指的就是代理软件?
    XiaoXiaoMagician
        10
    XiaoXiaoMagician  
    OP
       2023-03-03 10:03:12 +08:00
    @q1angch0u 按你说的就是需要由客户端本地启动一个服务,用作代理服务?还有就是我目前即使开抓包软件抓,一样不影响游戏登录,还是能狗正常游玩的。抓的官服永劫无间。
    ryanbuu
        11
    ryanbuu  
       2023-03-03 10:54:17 +08:00 via iPhone
    @jobmailcn 这种盲猜是双向证书认证了…
    ryanbuu
        12
    ryanbuu  
       2023-03-03 10:55:09 +08:00 via iPhone
    @XiaoXiaoMagician 不影响并且可以正常登录的话那就不是这种情况
    shibo501c
        13
    shibo501c  
       2023-03-03 11:12:20 +08:00
    @lasuar @XiaoXiaoMagician @jobmailcn @studyingss @q1angch0u 请教下,如果做一个这种网络加速的开源项目,会有人想用吗,比如提供 TCP 或者 QUIC 的通道,TLS 1.3 的握手,,然后集成到 js ,kotlin ,swift 的网络库里,可以选择发现请求延迟大于一定的情况下,开启请求的隧道,转给一个轻量级的中转服务,转给用户内网的服务。在做一个 UI 进行一些统计和 Debug 的功能。
    shibo501c
        14
    shibo501c  
       2023-03-03 11:14:04 +08:00
    我了解到的是大厂都有网关团队,有的叫做长连接服务,请求治理什么的,好像开源的不多。
    studyingss
        15
    studyingss  
       2023-03-03 12:04:40 +08:00 via Android   1
    @shibo501c 没搞懂你想说什么。

    如果是想要降低服务器负载并且让资源尽可能接近 client ,有个相似的东西叫做 CDN 。

    你想开源什么我也没搞懂,如果你说的那个 tcp / quic 通道是延迟更低更快线路的话,是要花钱找运营商买的。然后再集成一下就叫做游戏加速器了。。。

    如果你只是开源连接到代理的工具的话有个叫 netch 的东西。

    集成到网络库又是什么。。。quic tls tcp 全部都是标准的东西,早就在库里了。

    不存在不额外依赖中转服务器就可以直接提升网络质量的方法,如果有早就被放到标准协议里了,比方说多路复用确实有效,于是就有了 http/2 。kcp 能显著降低延迟所以一堆游戏都在用。


    我的知识比较浅,确实是没看懂你想开源啥。
    studyingss
        16
    studyingss  
       2023-03-03 12:10:50 +08:00 via Android   1
    @XiaoXiaoMagician 看你第一张截图不是游戏啊

    看起来是设置了系统代理被浏览器识别到之后连接到 http 代理。这种请求是客户端主动发的,比如说你在软件设置里面设置了使用 http 代理 /使用系统代理同时系统设置了代理,就会发送这种 connect 请求。

    至于游戏是什么情况我就不知道了。
    shibo501c
        17
    shibo501c  
       2023-03-03 12:17:39 +08:00
    @studyingss CDN 主要还是静态资源,主要是加速 RESTFul API ,优化弱网响应的速度,部署在海外也可以,很多工具都能代理请求哈,但是都是设备级别的,主要是针对 APP 或者 网站级别的。比如美团的做法 https://zhuanlan.zhihu.com/p/144449362
    studyingss
        18
    studyingss  
       2023-03-03 12:43:02 +08:00 via Android
    @shibo501c 这个依然需要服务器来配合呀,client 和 server 都是美团自家的,想怎么弄怎么弄,比方说中间提到的 tcp 长连接,所有 http 请求使用二进制通过这条 tcp 连接发送,代理服务器需要做解析工作的呀。

    排除掉他们给自己业务做的针对性优化,再考虑上通用性,最终结果是可能你发现自己重新发明了 http/2 或者 quic 。

    如果你想在不更改 server 的情况下做优化,那就只有自己买一台服务器来做解码然后由服务器请求。

    如果你想把上面文章提到的技术写成一个通用的库开源出来,那用户要使用就得先自己去买台服务器。

    假设一个人非常非常牛逼,首先开发出了一个用户-proxy 的工具,所有请求都通过一个连接发代理服务器所以可以复用连接,非常快,并且自带连接迁移,即使在移动场景下也可以保证连接稳定。
    然后为了这台代理服务器能高速访问目的服务器,再让所有大厂都主动把资源放这台代理服务器。

    然后它给这个东西取名,叫做 cloudflare warp ?

    还是说我对你的想表达的东西的理解依然有偏差?
    shibo501c
        19
    shibo501c  
       2023-03-03 12:52:10 +08:00   1
    @studyingss 感谢回复,你的理解没有偏差。我们内部在使用 http2 或者 quic 的时候,发现改造的成本比较大,最终是通过一个代理服务来做的,内部统计上看,p99 等长尾的数据确实改善明显。确实不够通用,而且还有排查问题更复杂的情况。不过目前看很多大厂都有在使用这种方式。肯定是要部署启动一个进程的,所以肯定是针对有自己机房和服务的团队。
    vmuu
        20
    vmuu  
       310 天前
    我最近也老是遇到这个
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5610 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:34 PVG 14:34 LAX 23:34 JFK 02:34
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86