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

基于 Clash 核心的测速工具,帮我发现了我正在使用的机场是个垃圾

  •  5
     
  •   faceair ·
    faceair · 360 天前 · 9908 次点击
    这是一个创建于 360 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我之前使用的机场的特点是使用 Clash 自带的延迟测试来看延迟都很低,但实际带宽很低很低。平时看 Clash 自带的测速很漂亮就以为很好,最近下载一些 huggingface 上的模型自己玩就发现其实很卡。机场的的节点一般很多,如果配置的是 Loadbalance 的模式的话手动跑 speedtest 还是比较困难的,还是需要一个简单可靠的测速工具帮助定位问题的。

    我在 Github 搜罗了一圈,发现似乎没有很好的轮子:
    1. StairSpeedtest 本地运行直接 crash 了
    2. SSRSpeedN 安装运行起来比较复杂
    3. nodesCatch 闭源工具不敢用
    4. starudream/clash-speedtest 勉强能用,但不支持 Proxy Provider
    5. FullTclash 有一些机场在用,个人用起来比较麻烦

    我写的这个工具的特点:
    1. 无需额外的配置,直接将 Clash 配置文件地址作为参数传入即可
    2. 支持 Proxy 和 Proxy Provider 中定义的全部类型代理节点,兼容性跟 Clash 一致
    3. 不依赖额外的 Clash 实例,单一进程即可完成测试
    4. 代码简单而且开源,不发布构建好的二进制文件,保证你的节点安全

    Github 地址 https://github.com/faceair/clash-speedtest

    从功能上来说当前还只满足了比较简单的个人需求,但如果大家对这个实现有兴趣,可以开 issue 或者 pr 一起完善。
    第 1 条附言  ·  359 天前
    之前在超时后的计算结果不正确,可能会导致测速的带宽偏大,更新到最新版可以解决
    43 条回复    2024-03-14 10:49:45 +08:00
    Drumming
        1
    Drumming  
       359 天前
    很有用!
    xiaomoxian
        2
    xiaomoxian  
       359 天前 via Android
    支持原创大佬
    Aloento
        3
    Aloento  
       359 天前
    支持
    christin
        4
    christin  
       359 天前
    我用的机场 150 个节点,每个都下载 100m 估计测两次速流量就没了。
    1423
        5
    1423  
       359 天前 via iPhone   ❤️ 1
    推荐 ttfb.sh
    1423
        6
    1423  
       359 天前 via iPhone
    脚本不是域名
    goodryb
        7
    goodryb  
       359 天前
    能否打包个二进制给 windows 用
    cssk
        8
    cssk  
       359 天前 via iPhone
    延时和带宽有啥关系
    faceair
        9
    faceair  
    OP
       359 天前
    @christin #4 你可以使用 -f 参数来指定你想测速的节点,也可以使用 -s 参数指定单次测试要下载的文件大小。

    @1423 #5 介绍中我已经对比了 TTFB 类型的测速方法的几种缺陷:
    1. 如果 Loadbalance 的策略不好测出全部节点的延迟
    2. TTFB 只能代表延迟不能测出带宽,是有可能延迟低但带宽也低的
    所以实际上 TTFB 的测试在这种情况下并不好用。

    @goodryb #7 这种比较敏感的应用如果手动 Release 二进制还是有些风险的,后面我看下是否可以通过 Github Workflow 来自动打包,增强中间的透明度
    faceair
        10
    faceair  
    OP
       359 天前
    @cssk #8 这是两个类型的指标,应该独立看待,我在 README 中已经有些介绍了。
    SenLief
        11
    SenLief  
       359 天前
    我一般就是从 dropbox 拉 1g 的文件,看看能不能跑满带宽,能跑满不限速的都可以。
    1423
        12
    1423  
       359 天前
    一般不存在稳定低延迟又带宽低的节点
    gujigujij
        13
    gujigujij  
       359 天前
    有无机场推荐
    faceair
        14
    faceair  
    OP
       359 天前
    @gujigujij #13 这个帖子里就不歪楼了,可以搜一下站内之前的讨论 https://www.google.com/search?q=site:v2ex.com/t%20%E6%9C%BA%E5%9C%BA%20%E6%8E%A8%E8%8D%90
    faceair
        15
    faceair  
    OP
       359 天前
    @1423 #12 是存在的,而且很普遍。

    类比一下你去阿里云开一个小鸡,带宽只给 1m ,那么延迟可以很低同时带宽也很低。在机场这里的情况一般是香港的节点延迟低,但是可能受限于机器的带宽或者 IEPL 、IPLC 专线的带宽,实际大文件的下载或者看视频会卡。这种情况通过 Clash 的 url-test 或者你之前提到的 ttfb 是看不出来的。
    faceair
        16
    faceair  
    OP
       359 天前
    @goodryb #7 配置了一个 goreleaser 的 github workflow ,现在有自动的打包了 https://github.com/faceair/clash-speedtest/releases/tag/v1.0.0
    Kinnice
        17
    Kinnice  
       359 天前
    @1423 #12 游戏节点 /真 IPLC 节点
    bitkuang8
        18
    bitkuang8  
       358 天前
    支持一波开源大佬~
    2000wcw
        19
    2000wcw  
       358 天前   ❤️ 1
    v2ray 和 CLASH 的测速,很多都是只看 ping ,其实这个最不靠谱,稳定的机场和 VPS 就算延迟高一点,只要带宽稳定,就能流畅播放油管,所以我现在都是用下载来测速。
    vueli
        20
    vueli  
       358 天前
    请教一个问题,我也用过别的测试软件,结果显示速度快,但是实际使用发现节点根本用不了这种情况是为什么?
    faceair
        21
    faceair  
    OP
       358 天前
    @vueli #20 用我这个工具测出来情况是怎么样的?延迟和带宽匹配吗?
    macy
        22
    macy  
       358 天前
    已 start ,很棒的工具,有时候机场 ping 很低,但是视频会卡,又没有好办法,建议增加排名功能,测试结束后,过滤出速度最快的几个节点,能帮助用户直观选择
    faceair
        23
    faceair  
    OP
       358 天前   ❤️ 1
    @macy #22 已更新 v1.2.0 ,支持传入 http 订阅链接,支持默认按带宽降序排列,也给结果标记了一些颜色
    824020994
        24
    824020994  
       357 天前
    为什么我下载后,打开命令行文件闪退
    faceair
        25
    faceair  
    OP
       357 天前
    @824020994 #24 如果是 windows 的话可以尝试在终端运行这个 exe 文件,如果确实有啥报错的话可以开 issue 补充上下文信息再看
    yufeng0681
        26
    yufeng0681  
       356 天前
    这个应用,虽然有盗用风险, 但是还是值得做做增值服务的,就是 客观评价哪家机场是真的服务品质好;
    这样你就能 基于这个排名,做推荐入口。

    减少信息差,对用户就是好事。
    Jzdoxc
        27
    Jzdoxc  
       356 天前
    可以添加一个订阅转换的,有的机场的订阅是一大串字符,clash for windows 可以识别,使用你这个无法识别
    kaiger
        28
    kaiger  
       356 天前
    好东西,已 star ,就是能不能控制下载文件大小,节点多的话,几轮测速流量就没了。
    faceair
        29
    faceair  
    OP
       356 天前
    @kaiger #28 有参数,你仔细看下
    Royal22
        30
    Royal22  
       356 天前
    我曾经考虑过采用类似的方法进行测速并选择最优节点,但是后来我发现这种方法存在一些问题。例如,在高峰期和平时,速度可能会有所不同,就连 NF 的速度都大不相同,并且稳定性也需要考虑。因此,我正在思考如何解决这个问题,使之更加线性化和可靠。
    faceair
        31
    faceair  
    OP
       356 天前 via iPhone
    @Royal22 可能不用选择最优节点。如果这个机场不能保证在高峰时间的可用带宽充足,换一家就好了。
    vituralfuture
        32
    vituralfuture  
       356 天前
    正好最近在学 go ,可以学一下
    不过我有一个疑问,为什么写入 csv 文件要插入 BOM?
    我了解的是,BOM 可能会干扰一些软件处理文本流
    另外 BOM 对 UTF-8 是可选的
    faceair
        33
    faceair  
    OP
       355 天前
    @vituralfuture #32 这部分代码的主体是一位贡献者提供的 https://github.com/faceair/clash-speedtest/pull/1 根据他的描述可能是 excel 打开 utf8 的 csv 的时候需要 BOM 。如果你想移除这个 BOM 的话可以介绍一下具体的使用场景,我来权衡一下,可能再额外开个选项之类的,或者提供 json 等其他的格式来使用。
    faceair
        34
    faceair  
    OP
       355 天前
    @Jzdoxc #27 你说的这个应该是 ss 或者 ssr 的订阅,要解析转成 clash 的格式在代码实现上还是比较费劲的。你可以自己找一些工具来转换。
    另外是其实大部分的机场现在应该都是直接提供 clash 的订阅的链接的,如果明面上没有的话也可以自己尝试加一下 &flag=clash 或者 &clash=1 看看。https://github.com/Dreamacro/clash/issues/2632#issuecomment-1475482445
    likeme
        35
    likeme  
       354 天前
    mac os 有能用的嘛
    faceair
        36
    faceair  
    OP
       354 天前
    @likeme #35 现在是有什么问题?应该是全平台通用的
    likeme
        37
    likeme  
       354 天前
    @faceair 抱歉没看到需要用到 go 环境~
    ciki
        38
    ciki  
       354 天前
    测试了下,我的机场识别不到节点
    faceair
        39
    faceair  
    OP
       354 天前
    @ciki #38 方便的话可以尝试隐去节点信息之后提个 issue ,贴一下完整的文件,我看下结构
    jesky
        40
    jesky  
       353 天前 via iPhone
    这是个好东西,收藏了,明天试试
    marvincible
        41
    marvincible  
       113 天前
    go install 装不了了

    The go.mod file for the module providing named packages contains one or
    more replace directives.
    marvincible
        42
    marvincible  
       113 天前
    @faceair #34 6 啊 之前一直在用转换工具,没想到加一个 clash=1 解决了
    cnsdytedison
        43
    cnsdytedison  
       43 天前
    @faceair 感谢大佬,搜到了您 github 上的仓库但是仓库上没有写 windows 包的位置。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1870 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:38 · PVG 00:38 · LAX 09:38 · JFK 12:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.