V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bybyte
V2EX  ›  分享创造

暴力搜索 CloudFlare 节点 IP

  •  
  •   bybyte ·
    golangboy · 88 天前 · 3810 次点击
    这是一个创建于 88 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知,WS 套 CF 是既安全又免费(国内支持 WS 的 CDN 价格极高),但是有些地区到 CF 默认分配的 IP 速度极慢,延迟几百不等,开个 Google 转半天。

    所以写了个小工具,直接暴力搜索 CloudFlare 所有服务 IP 节点,最后选出速度最快的服务节点

    https://github.com/golangboy/fast-cloudflare

    有 docker 的直接运行就好

    docker run -t golangboyme/fast-cloudflare
    

    我找到一个延迟 20 多的 cf 节点

    ➜  Downloads ping 103.21.244.248
    PING 103.21.244.248 (103.21.244.248): 56 data bytes
    64 bytes from 103.21.244.248: icmp_seq=0 ttl=43 time=20.606 ms
    64 bytes from 103.21.244.248: icmp_seq=1 ttl=43 time=20.243 ms
    

    注意:搜索的时候会占用大量的 TCP 资源,这时候上网体验不佳,代码里可以自己调整并发量

    28 条回复    2024-03-09 13:09:03 +08:00
    dianso
        1
    dianso  
       88 天前
    已经安全用了四五年了
    没被封过一次
    ws cf
    molezznet
        2
    molezznet  
       88 天前
    好像 cf 网上讨论主要是用段时间会阻断几分钟
    https://github.com/XIU2/CloudflareSpeedTest/issues/217

    另外支持 v6 可能会不容易阻断些
    Stoney
        3
    Stoney  
       88 天前 via iPhone
    这就是 cf 优选 ip 吧
    godmiracle
        4
    godmiracle  
       88 天前
    和 CloudflareST 寻找最优 ip 原理一样吗
    molezznet
        5
    molezznet  
       88 天前
    Performing first stage
    █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 17743/1524736

    这…… 看起来是很暴力啊
    molezznet
        6
    molezznet  
       88 天前
    有没有可能随机一个比例, 这 2 个 stage 还没跑完 ……
    yuanmomo
        7
    yuanmomo  
       88 天前 via iPhone
    op 这个版本扫描的是 cf 的 ip 。还有一个东西是扫国内 ip ,然后往 ip 发送一个 https 的请求,带上一个域名,通过返回值来判断这个机器是不是一个会转发请求的类似 cdn 的节点。这个可以明确是有的,曾经有用过,用了好几年,但是是别人给我的,这样通过这个节点,随随便便上 10MB/s 。坏处就是这个节点随时可能会挂,挂了需要继续找。
    bybyte
        8
    bybyte  
    OP
       88 天前 via iPhone
    @molezznet 我用了半个月了,目前还没问题
    bybyte
        9
    bybyte  
    OP
       88 天前 via iPhone
    @yuanmomo 你说的是扫那些反代 cf 的服务器 ip 吧
    bybyte
        10
    bybyte  
    OP
       88 天前 via iPhone
    @molezznet 毕竟 100 多万个 ip ,确实,整个要跑要花几十分钟
    zictos
        11
    zictos  
       88 天前
    @bybyte #10 CloudflareST 每次只跑 6000 个左右的 ip ,不知道每次的 ip 变不变的,据说是每次每个 ip 段随机使用一个 ip
    bybyte
        12
    bybyte  
    OP
       88 天前 via iPhone
    @zictos 6000 个太少了吧,总共 100 多万个 ip 呢
    zictos
        13
    zictos  
       88 天前
    @bybyte #12 反正我用他的脚本跑出来的延迟一般都有 100 多 ms 以上,不过速度也可以接受,比不使用优选 ip 好了无数倍,他的每次测完延迟也会测试前面 10 个延迟最低的 ip 的下载速度,按下载速度排序,也可以在他的脚本执行完毕后自己根据延迟和下载速度并用一定的权重计算一个分数,找出综合的最优 ip 。
    我在考虑把每次用过的 ip ( hosts 中用过的)都记录到数据库并添加使用时的时间戳,以后再测速的时候再从最近用过的 ip 中挑 10 个出来一起测。
    molezznet
        14
    molezznet  
       88 天前
    @zictos 好吧 还真没记录过那些使用过的
    bybyte
        15
    bybyte  
    OP
       88 天前 via iPhone
    @zictos 我是所有都扫一遍出来,再排序,按下载速度排序这个功能确实可以加一下
    molezznet
        16
    molezznet  
       88 天前
    @bybyte 别,延迟好挺好了。否则时间更久呐。

    ![image]( https://i2.100024.xyz/2024/02/22/hay68w.webp)
    一个多小时
    molezznet
        17
    molezznet  
       88 天前
    另一个电脑更慢,冲 2 小时去了
    [img]https://i2.100024.xyz/2024/02/22/hc50xf.webp[/img]
    zictos
        18
    zictos  
       88 天前
    @bybyte #15 下载不能测太多,要不太占资源,也太占 cf 的流量,CloudflareST 这个程序是默认只测延迟最低的 10 个 ip 的下载速度,排序要综合考虑,而不是单纯按下载速度或延迟排序。

    CloudflareST 生成测速结果的 result.csv 文件的格式如下
    IP 地址,已发送,已接收,丢包率,平均延迟,下载速度 (MB/s)
    104.18.17.65,4,4,0.00,173.89,15.90
    104.19.139.124,4,4,0.00,156.60,15.80
    104.19.244.185,4,4,0.00,156.82,14.50
    104.16.120.31,4,4,0.00,157.34,14.30
    104.21.233.134,4,4,0.00,157.53,14.21
    104.18.27.152,4,4,0.00,158.02,13.20
    104.18.29.225,4,4,0.00,158.45,13.12
    104.21.228.41,4,4,0.00,159.05,12.50
    104.18.125.115,4,4,0.00,159.28,11.50
    104.19.132.67,4,4,0.00,160.25,11.00

    # 找出上述 ip 的最优 ip 的 python 代码
    import pandas as pd
    df = pd.read_csv('result.csv') # 读取 result.csv 文件
    total_latency = df['平均延迟'].sum()
    total_download_speed = df['下载速度 (MB/s)'].sum()
    df['Latency_Percentage'] = df['平均延迟'] / total_latency
    df['Download_Speed_Percentage'] = -(df['下载速度 (MB/s)'] / total_download_speed)
    df['Composite_Score'] = df['Latency_Percentage'] + df['Download_Speed_Percentage']
    best_ip_row = df.loc[df['Composite_Score'].idxmin()]
    first_ip = best_ip_row['IP 地址']
    print(first_ip) # 输出 104.19.139.124
    akirageorge
        19
    akirageorge  
       88 天前
    能不能出一个针对 ipv6 的 cf 地址延迟的搜索程序呢?
    molezznet
        20
    molezznet  
       88 天前
    @akirageorge 也有需求

    不过这样只能随机选些,量太大
    bybyte
        21
    bybyte  
    OP
       88 天前 via iPhone
    @akirageorge 完全没问题,过两天回学校就加上
    bybyte
        22
    bybyte  
    OP
       88 天前 via iPhone
    @zictos 是的,我的意思是对最后的最优的 n 个结果再进行一次下载速度测试
    bybyte
        23
    bybyte  
    OP
       88 天前 via iPhone
    @molezznet 因为你第一阶段扫出来的 ip 太多了,而第二阶段 ping 测延迟不能太大并发,不然整个网络拥堵了测出来的延迟不准。
    bybyte
        24
    bybyte  
    OP
       88 天前 via iPhone
    @molezznet 后面我考虑一下用户自定义 ip 数量吧,可以按一定比例
    iqoo
        25
    iqoo  
       88 天前
    先用 masscan 初筛一下,可以快几百倍。
    yuanmomo
        26
    yuanmomo  
       87 天前 via iPhone
    @bybyte 对,但是不止 cf ,还有 aws 的 cloudfront ,虽然我没懂为啥国内会有这些机器的存在,但是确实是有。
    sbilly
        27
    sbilly  
       73 天前
    golangboy 用 rust 了?
    bybyte
        28
    bybyte  
    OP
       72 天前
    @sbilly 是的。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3525 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:20 · PVG 18:20 · LAX 03:20 · JFK 06:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.