V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
YCCD
V2EX  ›  程序员

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

  •  2
     
  •   YCCD · 2024-08-19 13:37:11 +08:00 · 5545 次点击
    这是一个创建于 379 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    第 1 条附言  ·  2024-08-19 18:58:03 +08:00
    • 会开源,但是目前代码有点丑,等我修改完,
    • 原理就是 检测一下 tls 的 rtt 和 tcp 的 rtt,如果没有代理,两者应该是差不多的
    第 2 条附言  ·  2024-08-20 15:52:19 +08:00

    代码已开源,在 /t/1066463

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


    好吧。
    LitterGopher
        18
    LitterGopher  
       2024-08-19 18:06:04 +08:00
    ![连续测试多次结果]( )

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

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