V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
YCCD
V2EX  ›  程序员

写了一个用来检测 proxy 的 api,目前来看,正确率应该比较高

  •  2
     
  •   YCCD · Aug 19, 2024 · 6238 views
    This topic created in 622 days ago, the information mentioned may be changed or developed.

    ProxyChecker

    • 这个检测方法不需要任何 ip 库,成本很低,还比较难绕过

    • 原理的话,不是 ip 库,不是 tls 指纹,不是检测分流规则,不是 dns 泄露,不是 webrtc

    • 根据我目前的了解,应该没有其他的 api 使用这个检测方法(可能是我见的少)

    • 能检测 proxy ,但是有些 virtual private network 检测不到(比如 wireguard 等)

    • 上面链接是个简单的前端 UI ,可以直接用 curl 访问:

      curl https://api.proxychecker.yccd.cc:8443
      
      # use http://127.1:7890 as http_proxy
      curl https://api.proxychecker.yccd.cc:8443 -x http://127.1:7890
      

      需要 curl 支持 http2 ,windows 默认的 curl 好像不支持,

      也可以直接在浏览器访问这个 https://api.proxychecker.yccd.cc:8443

    • 有些情况下检测不出来,但应该是少数情况,国内使用国内的 proxy 可能检测不到

    • 用来检测一些使用 proxy 的爬虫应该效果不错

    • 目前接口可能会需要 1-10s 响应,可以再优化一下,懒得搞了

    • 只能检测是否使用代理,没法获取到真实 ip

    Supplement 1  ·  Aug 19, 2024
    • 会开源,但是目前代码有点丑,等我修改完,
    • 原理就是 检测一下 tls 的 rtt 和 tcp 的 rtt,如果没有代理,两者应该是差不多的
    Supplement 2  ·  Aug 20, 2024

    代码已开源,在 /t/1066463

    55 replies    2024-09-02 16:01:48 +08:00
    JsonNode
        1
    JsonNode  
       Aug 19, 2024
    JsonNode
        2
    JsonNode  
       Aug 19, 2024
    随便换了几个 ip 就检测不出了
    KagurazakaNyaa
        3
    KagurazakaNyaa  
       Aug 19, 2024
    透明代理好像检测不出来
    Retas
        4
    Retas  
       Aug 19, 2024
    同一个 IP 刷新几次在 Yes 和 No 反复横跳,检测有点玄学成分
    YCCD
        5
    YCCD  
    OP
       Aug 19, 2024
    @Retas 有些数据就是在临界值附近的,多收集点数据可能会准一些
    YCCD
        6
    YCCD  
    OP
       Aug 19, 2024
    有 5-10%的数据离临界值比较近
    w88975
        7
    w88975  
       Aug 19, 2024
    原理是啥? IP 定位?
    YCCD
        8
    YCCD  
    OP
       Aug 19, 2024
    @w88975 不是定位
    lisxour
        9
    lisxour  
       Aug 19, 2024
    接口不太稳定,没法用啊,能稳定在 3 秒内就差不多了,偶尔会出现 7 、8 秒的情况,大部分 2 秒内。
    cenyejinxi
        10
    cenyejinxi  
       Aug 19, 2024
    原理是往返时间么?
    ciki
        11
    ciki  
       Aug 19, 2024   ❤️ 5
    你发这些有什么目的?谁指使你的?你的动机是什么?
    YCCD
        12
    YCCD  
    OP
       Aug 19, 2024
    @lisxour 可以优化,暂时先看看效果怎么样
    alect
        13
    alect  
       Aug 19, 2024
    我真实 ip 提示 proxy
    pagxir
        14
    pagxir  
       Aug 19, 2024 via Android
    #13 我估计测试 3 层时延跟 4 层的差,然后你机器性能比较差或者网络丢包重传了,然后被识别成。明显是不靠谱的评估方式
    WorldlineChanger
        15
    WorldlineChanger  
       Aug 19, 2024
    时间差?
    montaro2017
        16
    montaro2017  
       Aug 19, 2024
    没检测出来
    tf2
        17
    tf2  
       Aug 19, 2024
    阿里云的 ip 你告诉我不是代理。。


    好吧。
    LitterGopher
        18
    LitterGopher  
       Aug 19, 2024
    ![连续测试多次结果]( )

    确实存在部分抖动,而且服务本身好像不太稳定,有时候请求不到。

    > 有开源的打算么?想要学(白)习(嫖)一下。
    R4rvZ6agNVWr56V0
        19
    R4rvZ6agNVWr56V0  
       Aug 19, 2024
    OS fingerprint + UA matching ?
    nothspec
        20
    nothspec  
       Aug 19, 2024 via Android
    高级呀,哥,我 N 个节点都对了
    yanyao233
        21
    yanyao233  
       Aug 19, 2024 via Android
    蹲一个原理,后续会开源吗?
    slowman
        22
    slowman  
       Aug 19, 2024
    tcp 时间戳?
    Bingchunmoli
        23
    Bingchunmoli  
       Aug 19, 2024 via Android
    打不开
    slowman
        24
    slowman  
       Aug 19, 2024   ❤️ 6
    抓包看了下, 应该是对比 ack time 和 http2 ping time
    有点东西
    YCCD
        25
    YCCD  
    OP
       Aug 19, 2024
    @1423 就是这样的
    slowman
        26
    slowman  
       Aug 19, 2024
    @YCCD #25 @YCCD #25 好奇你的代码 clean 还是 dirty
    严格做的话应该有个单独的进程/线程抓包, http2 ping 和抓包 ack 匹配是个问题, 毕竟是加密的
    简单做的话只抓 tcp 按字节数规律也行, 只需要找个 http2 server 魔改插入 ping
    1rv013c6aiWPGt24
        27
    1rv013c6aiWPGt24  
       Aug 19, 2024
    打算开源吗?挺准的
    YCCD
        28
    YCCD  
    OP
       Aug 19, 2024
    @1423
    不需要那么麻烦,tcp 的 rtt linux 有接口可以直接拿
    http2 的话确实需要一些处理,不过也不难
    YCCD
        29
    YCCD  
    OP
       Aug 19, 2024
    @UncleCAT4 开源,但是现在代码有点丑
    v1
        30
    v1  
       Aug 19, 2024
    如果我写个脚本在落地机上先跑上 N 次并标记 no_proxy 呢?
    YCCD
        31
    YCCD  
    OP
       Aug 19, 2024
    @kk2syc 你是说检测爬虫方面吗?
    可以只标记一条 tcp 连接是正常的,如果是 http2 协议的话,之后的请求应该是会复用这条连接的。
    这个检测不难
    qq316107934
        32
    qq316107934  
       Aug 19, 2024
    没试海外的节点准不准,但是国内正常的网络被误判的很严重
    qq316107934
        33
    qq316107934  
       Aug 19, 2024
    好像找到原因了,4G 和 WiFi 下因为网络波动就会造成误判,有线连接效果会好一点,但也有。
    YCCD
        34
    YCCD  
    OP
       Aug 19, 2024
    过滤异常数据的算法有点问题,等我改改
    outtime
        35
    outtime  
       Aug 19, 2024
    感觉更像是网络质量测试,代理延迟低到一定水平就可以一直过检测
    v1
        36
    v1  
       Aug 19, 2024
    @YCCD 不是,我是说如何突破你这个根据波动比例来判断的算法。问题在于你需要纠正算法误差,能纠正就很好搞了,标记 no_proxy 基数达到一个量,你的 proxy 判断也会被纠正
    R4rvZ6agNVWr56V0
        37
    R4rvZ6agNVWr56V0  
       Aug 19, 2024
    受制于网络通讯的稳定性
    KagurazakaNyaa
        38
    KagurazakaNyaa  
       Aug 19, 2024
    对于工作在第三层和第四层的代理(策略路由和透明代理)似乎无效
    pagxir
        39
    pagxir  
       Aug 19, 2024 via Android
    @XiLingHost 不要说三层四层了,你机器慢一些就误判了,对一一个高负载的机器, 内核处理到应用层 58 毫秒延迟很平常
    Masterlxj
        40
    Masterlxj  
       Aug 19, 2024
    不如直接 ja4 啊
    duzhuo
        41
    duzhuo  
       Aug 19, 2024
    怎么感觉以前看过类似的帖子
    ztmzzz
        42
    ztmzzz  
       Aug 20, 2024
    为啥有代理 rtt 时间会不一样,数据包的路径应该是相同的吧。难不成是代理协议处理的时间差别?
    mintongcn
        43
    mintongcn  
       Aug 20, 2024 via iPhone
    等开源
    mintongcn
        44
    mintongcn  
       Aug 20, 2024 via iPhone
    代理原来这么好检测,我给代理 tcp 加上延时 100ms ,是不是就不好检测了
    不打游戏对延时不敏感。
    qwertooo
        45
    qwertooo  
       Aug 20, 2024
    不准确
    kazumaa
        46
    kazumaa  
       Aug 20, 2024
    这不是 tls over tls 检测吗
    dode
        47
    dode  
       Aug 20, 2024
    这个咋样
    Hysteria 是一个功能丰富的,专为恶劣网络环境进行优化的网络工具(双边加速),比如卫星网络、拥挤的公共 Wi-Fi 、在中国连接国外服务器等。 基于修改版的 QUIC 协议。
    Rehtt
        48
    Rehtt  
       Aug 20, 2024 via Android
    没有用代理,但 "is_proxy": true 🤣
    andyC
        49
    andyC  
       Aug 20, 2024
    感觉是不错的, 等开源
    8153
        50
    8153  
       Aug 20, 2024
    这别人早就发布了,google 搜 通过 https 握手 rtt 识别 TCP 代理(SOCKS5/HTTP/HTTPS)
    tianhehechu
        51
    tianhehechu  
       Aug 20, 2024
    此 API 原理及其简单,已被我破解。他测试了源 IP 的访问延迟,在延迟大于 200ms 时,即判定为代理。所以评论区有的 V 友全中,有的 V 友遇到反复横跳的情况。
    tianhehechu
        52
    tianhehechu  
       Aug 20, 2024
    @tianhehechu 30~50ms 是判定值,并且多次检测取了平均值
    YCCD
        53
    YCCD  
    OP
       Aug 20, 2024
    @tianhehechu 源码放出来了,可以看看去
    YCCD
        54
    YCCD  
    OP
       Aug 20, 2024
    @8153 确实,原理差不多,都是找 client 到 proxy server 的延迟
    lypdarling
        55
    lypdarling  
       Sep 2, 2024 via Android
    @YCCD 准确率不错,但是感觉很容易被破。这个必须在前端去执行检测。爬虫可以在爬虫端设置本地服务 hosts 指向检测服务器域名,然后本地服务返回 is_proxy 为 false 就行了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2422 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 99ms · UTC 04:40 · PVG 12:40 · LAX 21:40 · JFK 00:40
    ♥ Do have faith in what you're doing.