chuan 0db5111267 feat: sample latency multiple times and tolerate keep-alive drops
- time several round-trips on the warm connection and report the
  fastest, shedding transient network jitter
- time the warm-up request too and fall back to it if the node won't
  honour keep-alive, instead of failing the IP outright
- stop at the first reuse failure and keep the samples already gathered
0db5111267 · 2026-06-23 23:41:33 +08:00
17 Commits
2026-06-23 19:29:34 +08:00

fast-xray

Cloudflare 优选 IP 工具,面向 CDN 落地的 VLESS 节点。纯 Rust,内置 VLESS + WebSocket + TLS 客户端,无需 xray

从 Cloudflare 的 IP 段中筛出延迟低、下载快的 IP,输出可直接导入的节点(别名 速度-延迟-ip,如 12.34M-156ms-104.19.53.168)。

原理

节点经 Cloudflare 反代(橙云)时,任意 CF IP 都接受其 TLS 连接,回源由 TLS SNIWebSocket Host 决定。优选只替换连接 IP,SNI / Host 保持原域名,即可在等价的 CF IP 中择优。

网络拓扑

flowchart LR
    Client["客户端<br/>fast-xray"]
    subgraph CF["Cloudflare 任播网络"]
        direction TB
        IP1["CF IP A"]
        IP2["CF IP B"]
        IP3["CF IP …(最优)"]
    end
    Origin["源站<br/>VLESS 服务端"]
    Dest["目标<br/>generate_204 · cachefly"]

    Client -.->|探测候选| IP1
    Client -.->|探测候选| IP2
    Client ==>|"选最优 · TLS"| IP3
    IP1 --> Origin
    IP2 --> Origin
    IP3 ==>|"SNI / Host = 原域名"| Origin
    Origin --> Dest

不同候选 IP 仅是进入 Cloudflare 的入口不同,均回到同一源站;优选即在其中挑延迟低、速度快的入口。

隧道分层

flowchart TB
    A["TCP — 候选 CF IP:443"]
    B["TLS — SNI = 原域名"]
    C["WebSocket — Host = 原域名, path = 原 path"]
    D["VLESS 头 — uuid + 目标地址"]
    E["内层 TLS + HTTP — 测延迟 / 下载测速"]
    A --> B --> C --> D --> E

其中 SNI 与 Host 始终为原域名,候选 IP 仅决定流量从哪个 Cloudflare 入口进入。

适用范围

仅支持 VLESS + ws + tlsencryption=none、无 flow / Vision 的 CDN 落地节点。

Reality 直连源站、不经 CDN,不适用本工具。

使用

完整流程(无子命令即 auto):

fast-xray --node-file node.txt -n 50 --lat-top 30 --speed-top 10

节点 URL 含 &,可直接加引号传入,或用 --node-file 从文件读取。结果写入 result/result.txt

各阶段也可单独运行用于调试或定制。

流水线

flowchart LR
    CF["CF IP 段"] -->|ping| A["ip.txt<br/>N 个有效 IP"]
    A -->|latency| B["latency.csv<br/>最快 M 个"]
    B -->|speed| C["speed.csv<br/>最优 K 个"]
    C -->|export| R["result.txt<br/>可导入节点"]
阶段 输入 处理 输出
ping CF IP 段 TCP 443 探测,收集 N 个低延迟有效 IP ip.txt
latency ip.txt 建隧道测真实代理延迟 latency.csv latency.txt
speed latency.csv 下载测速,按速度档 + 延迟排序 speed.csv speed.txt
export 任一 IP 文件 生成可导入节点 result.txt

auto 即依次执行上述四步,中间结果同时落盘。

命令参考

auto — fast-xray [NODE] [OPTIONS]

参数 默认 说明
[NODE] / --node-file 节点 URL,或从文件读取
-n, --count 50 阶段 1 收集的有效 IP 数
--lat-top 30 阶段 2 保留的最快 IP 数
--speed-top 10 最终节点数
--speed-concurrency 1 测速并发数(1 最准,调大更快)
-6, --ipv6 off 同时测 IPv6
--ping-max 300 第一次 ping(TCP)延迟上限 ms
--lat-max 0 第二次 ping(真实延迟)上限 ms(0 关闭)
--min-speed 0 最低速度 Mbps(0 关闭)
-o, --output result 输出目录
-v, --verbose off 打印各阶段结果表

auto 使用各阶段默认的超时、并发、丢包等参数;需精调时单独运行子命令。

ping — fast-xray ping [OPTIONS]

参数 默认 说明
-n, --count 50 目标有效 IP 数,达成即停
-t, --timeout 3 TCP 连接超时(秒)
-c, --concurrency 100 并发数
-6, --ipv6 off 同时测 IPv6
-p, --port 443 探测端口
--max-probe count×100 探测预算上限
--times 1 每 IP 探测次数(>1 启用丢包过滤)
--min / --max 10 / 300 平均延迟区间 ms
--max-loss 0 丢包率上限 01
-o / -v result 输出目录 / 结果表

latency — fast-xray latency [NODE] [OPTIONS]

参数 默认 说明
[NODE] / --node-file 节点
-i, --input result/ip.txt 输入 IP 列表
-c, --concurrency 50 并发隧道数
-t, --timeout 5 单 IP 超时(秒)
--max 0 真实延迟上限 ms(0 关闭)
-p, --top 0 保留最快 N(0 全部)
-o / -v result 输出目录 / 结果表

speed — fast-xray speed [NODE] [OPTIONS]

参数 默认 说明
[NODE] / --node-file 节点
-i, --input result/latency.csv 输入(IP + 延迟)
-c, --concurrency 1 并发下载数
-t, --timeout 10 单 IP 下载上限(秒)
--bytes 10000000 每 IP 下载字节数
--min 0 最低速度 Mbps(0 关闭)
-p, --top 0 保留最优 N(0 全部)
-o / -v result 输出目录 / 结果表

排序:速度每 1 Mbps 一档,先比档位,同档按延迟升序。

export — fast-xray export [NODE] [OPTIONS]

参数 默认 说明
[NODE] / --node-file 节点
-i, --input result/ip.txt 有效 IP(纯 IP 或 CSV,取首列)
-o, --output result 输出目录

别名按输入列自动适配:speed.csv → 速度-延迟-ip,latency.csv → 延迟-ip,纯 IP → ip

输出

默认写入 result/:ip.txtlatency.{csv,txt}speed.{csv,txt}result.txt(最终可导入节点)。

S
Description
No description provided
Readme 355 KiB
0.2.0 Latest
2026-06-26 10:54:50 +08:00
Languages
Rust 86.7%
HTML 6.8%
JavaScript 6.5%