Files
fast-xray/README.md
T
chuan 02b33a3e6d feat: report speed in MB/s instead of Mbps
- drop the *8 bit conversion so throughput is MB/s, matching what
  clients like v2rayN display
- rename speed_mbps -> speed_mbs across speed/report/commands
- narrow the ranking bucket to 0.1 MB/s so slow (~0.1-0.3 MB/s) nodes
  still separate by speed instead of collapsing into one bucket
- update table/CSV/alias labels, color thresholds, --min-speed help,
  and README
2026-06-24 01:45:33 +08:00

162 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 SNI****WebSocket Host** 决定。优选只替换连接 IP,SNI / Host 保持原域名,即可在等价的 CF IP 中择优。
**网络拓扑**
```mermaid
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 的入口不同,均回到同一源站;优选即在其中挑延迟低、速度快的入口。
**隧道分层**
```mermaid
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 + tls``encryption=none`、无 flow / Vision 的 CDN 落地节点。
Reality 直连源站、不经 CDN,不适用本工具。
## 使用
完整流程(无子命令即 auto):
```bash
fast-xray --node-file node.txt -n 50 --lat-top 30 --speed-top 10
```
节点 URL 含 `&`,可直接加引号传入,或用 `--node-file` 从文件读取。结果写入 `result/result.txt`
各阶段也可单独运行用于调试或定制。
## 流水线
```mermaid
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` | 0 | 阶段 2 保留的最快 IP 数(0 = 全部) |
| `--speed-top` | 0 | 最终节点数(0 = 全部) |
| `--speed-concurrency` | 1 | 测速并发数(1 最准,调大更快) |
| `-6, --ipv6` | off | 同时测 IPv6 |
| `--ping-max` | 300 | 第一次 ping(TCP)延迟上限 ms |
| `--lat-max` | 0 | 第二次 ping(真实延迟)上限 ms(0 关闭) |
| `--min-speed` | 0 | 最低速度 MB/s(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 | 最低速度 MB/s(0 关闭) |
| `-p, --top` | 0 | 保留最优 N(0 全部) |
| `-o` / `-v` | result | 输出目录 / 结果表 |
排序:速度每 0.1 MB/s 一档,先比档位,同档按延迟升序。
### 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.txt``latency.{csv,txt}``speed.{csv,txt}``result.txt`(最终可导入节点)。