测速技术 高级

机场测速原理分析:stairspeedtest 与 FullTclash 是怎么测速的

拆解 Telegram 机场测速生态的底层原理,对比 stairspeedtest-reborn 与 FullTclash 的架构差异,讲清楚 TCP Ping、下载带宽、流媒体解锁是如何测出来的,以及用户侧测速与后端侧测速的区别和坑。

13 分钟 更新于 2026-05-14 内容可独立复现

一、Telegram 机场测速是什么

在 Telegram 的翻墙社区中,经常看到”机场测速”结果图,格式化展示每个节点的:

  • 延迟 (Ping)
  • 下载速度
  • 上传速度
  • UDP/Netflix/GPT 解锁情况
  • 丢包率

这些测速通常由 Bot 自动完成,背后的核心工具主要有两个:

工具GitHubStars说明
stairspeedtest-reborntindy2013/stairspeedtest-reborn3.8k+经典测速工具,支持批量节点
FullTclashAirportR/FullTclash活跃功能更全,支持流媒体解锁检测

二、测速工具架构

2.1 stairspeedtest-reborn 架构

┌─────────────────────────────────────────────────┐
│              stairspeedtest-reborn               │
│                                                  │
│  1. 输入: 订阅链接 / 节点列表 / Clash 配置       │
│              ↓                                    │
│  2. 解析: 提取所有节点信息                         │
│              ↓                                    │
│  3. 逐节点测试:                                   │
│     ┌─────────────────────────────────────┐      │
│     │  启动本地代理 (SS/V2Ray 客户端进程)  │      │
│     │         ↓                            │      │
│     │  设置系统代理指向本地端口              │      │
│     │         ↓                            │      │
│     │  执行测速:                            │      │
│     │    - TCP Ping (连接延迟)             │      │
│     │    - HTTP 下载 (speed.cloudflare.com)│      │
│     │    - 流媒体解锁检测                   │      │
│     │         ↓                            │      │
│     │  记录结果,关闭代理进程               │      │
│     └─────────────────────────────────────┘      │
│              ↓                                    │
│  4. 生成结果图片 (PNG)                            │
│              ↓                                    │
│  5. 输出: 图片 / 文本 / JSON                      │
└─────────────────────────────────────────────────┘

2.2 FullTclash 架构(Telegram Bot 集成)

Telegram 用户
      │ 发送订阅链接

┌──────────────┐
│ FullTclash   │
│ Telegram Bot │
└──────┬───────┘


┌──────────────────────────────────────┐
│          测速后端                      │
│                                       │
│  1. 解析订阅 → 提取节点列表            │
│  2. 为每个节点启动 Clash 实例          │
│     (clash -f config.yaml -d .)       │
│  3. 并发测试:                         │
│     ├── ICMP/TCP Ping               │
│     ├── 下载测速 (多线程 HTTP GET)    │
│     ├── Netflix 解锁检测              │
│     ├── Disney+ 解锁检测             │
│     ├── ChatGPT 可用性检测            │
│     ├── YouTube Premium 检测         │
│     └── IP 归属地查询                 │
│  4. 汇总结果 → 生成图片               │
│  5. 回复 Telegram 消息                │
└──────────────────────────────────────┘

三、核心测速原理

3.1 延迟测试 (Ping)

不是 ICMP Ping,而是 TCP 连接延迟或 HTTP 延迟:

TCP Ping:
  1. 记录开始时间 T1
  2. TCP connect() 到代理节点 IP:Port
  3. 连接成功,记录时间 T2
  4. 延迟 = T2 - T1
  5. 断开连接
  
HTTP Ping (更准确):
  1. 通过代理发送 HTTP HEAD 请求到 http://www.gstatic.com/generate_204
  2. 记录从请求到收到 204 响应的时间
  3. 这个延迟包含了: 代理握手 + TLS + 服务器路由延迟

3.2 下载测速

常用测速目标:
  - speed.cloudflare.com/cdn-cgi/trace    (Cloudflare)
  - cachefly.cachefly.net/100mb.test      (CacheFly CDN)
  - speed.hetzner.de/100MB.bin            (Hetzner)
  
测速流程:
  1. 通过代理连接测速服务器
  2. HTTP GET 下载测试文件
  3. 多线程并发下载 (通常 4-8 个连接)
  4. 记录总下载量和时间
  5. 计算: 速度 = 总下载量 / 总时间
  
  关键: 下载持续 10-15 秒,取稳定期的平均速度

3.3 上传测速

  1. 生成随机数据块 (通常 1-10MB)
  2. 通过代理 POST 到测速服务器
  3. 记录上传时间
  4. 速度 = 上传量 / 时间

3.4 流媒体解锁检测

核心原理:通过代理访问流媒体网站的特定接口,检查返回结果判断是否解锁。

# Netflix 检测原理
def check_netflix(proxy):
    # 方法1: 访问非自制剧页面,看是否跳转
    r = requests.get("https://www.netflix.com/title/81280792", 
                      proxies=proxy, allow_redirects=False)
    if r.status_code == 200:
        return "全解锁"  # 能看非自制剧
    elif r.status_code == 403:
        return "仅自制剧"
    else:
        return "不解锁"
    
    # 方法2: 检查 Netflix API
    r = requests.get("https://www.netflix.com/api/shakti/.../pathEvaluator", 
                      proxies=proxy)
    # 解析返回的 region 信息

# ChatGPT 检测原理  
def check_chatgpt(proxy):
    r = requests.get("https://chat.openai.com/", proxies=proxy)
    if "Sorry, you have been blocked" in r.text:
        return "封锁"
    # 进一步检查: 访问 API 端点
    r2 = requests.get("https://ios.chat.openai.com/", proxies=proxy)
    # 解析支持的地区

# YouTube Premium 检测
def check_youtube_premium(proxy):
    r = requests.get("https://www.youtube.com/premium", proxies=proxy)
    # 检查页面中的地区信息和价格货币
    
# Disney+ 检测
def check_disney(proxy):
    r = requests.get("https://www.disneyplus.com/", proxies=proxy)
    # 检查是否跳转到不可用地区页面

3.5 IP 质量检测

检查项:
  1. IP 归属地 (ipinfo.io / ip-api.com)
  2. ASN 信息 (是否机房 IP / 住宅 IP)
  3. 黑名单检查 (是否在 Spamhaus 等列表)
  4. DNS 泄漏检查 (通过代理解析特定域名,看 DNS 出口)

四、并发与效率

4.1 串行 vs 并行

串行测试(stairspeedtest 早期):

节点1 → 等30秒 → 节点2 → 等30秒 → ... → 节点N
总时间 = N × 30秒
50 个节点 = 25 分钟

并行测试(FullTclash):

同时启动多个 Clash/Xray 实例,每个绑定不同端口:
  端口 10001 → 节点1
  端口 10002 → 节点2
  ...
  端口 100XX → 节点N
  
并发度通常 5-10,总时间大幅缩短
50 个节点 / 并发10 = ~2.5 分钟

4.2 测速精度问题

影响因素说明
测速服务器位置Cloudflare 全球 CDN,测的是到最近 CDN 节点的速度
测速时间晚高峰 vs 凌晨,差距可能数倍
本机带宽测速机的上行带宽是瓶颈
并发度并发测速时节点之间互相抢带宽
代理开销加密/解密的 CPU 开销

五、测速 Bot 搭建

5.1 FullTclash Bot 搭建

# 前置依赖
apt install -y python3 python3-pip git wget

# 克隆项目
git clone https://github.com/AirportR/FullTclash.git
cd FullTclash

# 安装依赖
pip3 install -r requirements.txt

# 下载 Clash 核心
# (需要 Mihomo/Clash.Meta 内核)
wget -O bin/clash https://github.com/MetaCubeX/mihomo/releases/latest/download/mihomo-linux-amd64
chmod +x bin/clash

# 配置
cp config.example.yaml config.yaml

编辑 config.yaml

bot:
  token: "你的Telegram Bot Token"
  admin:
    - 你的Telegram用户ID

clash:
  path: "./bin/clash"
  
speedtest:
  download_url: "https://speed.cloudflare.com/__down?bytes=104857600"
  timeout: 15
  concurrent: 8
python3 main.py

5.2 使用方式

在 Telegram 中向 Bot 发送:

/test https://你的订阅链接

Bot 自动:

  1. 拉取订阅 → 解析节点
  2. 逐节点/并发测速
  3. 检测流媒体解锁
  4. 生成结果图片
  5. 回复消息

六、测速结果解读

典型测速结果表格:

┌──────────────┬───────┬──────────┬──────────┬─────────┬──────────┐
│     节点      │ Ping  │ 下载速度  │ 上传速度  │ Netflix │ ChatGPT  │
├──────────────┼───────┼──────────┼──────────┼─────────┼──────────┤
│ 🇭🇰 香港 01  │ 45ms  │ 128Mbps  │  42Mbps  │  全解锁  │    ✓     │
│ 🇭🇰 香港 02  │ 52ms  │  95Mbps  │  38Mbps  │ 仅自制  │    ✓     │
│ 🇯🇵 日本 01  │ 68ms  │ 156Mbps  │  55Mbps  │  全解锁  │    ✓     │
│ 🇺🇸 美国 01  │ 180ms │  78Mbps  │  22Mbps  │  全解锁  │    ✓     │
│ 🇸🇬 新加坡   │ 75ms  │ 112Mbps  │  40Mbps  │    ✗    │    ✓     │
│ 🇹🇼 台湾 01  │ 38ms  │  65Mbps  │  28Mbps  │    ✗    │    ✗     │
└──────────────┴───────┴──────────┴──────────┴─────────┴──────────┘

关键指标解读:

指标含义参考标准
Ping < 50ms优秀(亚洲近距离节点)游戏/实时通信
Ping 50-100ms良好日常使用
Ping > 200ms较差仅适合浏览
下载 > 100Mbps优秀4K 视频无压力
下载 30-100Mbps良好1080P 流畅
Netflix 全解锁能看所有地区内容IP 未被 Netflix 标记
Netflix 仅自制只能看 Netflix 原创IP 被标记为代理

七、原理总结

机场测速的本质是一个自动化代理节点批量质量检测系统

  1. 订阅解析 — 把订阅链接转换成结构化的节点参数列表
  2. 代理启动 — 为每个节点启动独立的代理客户端实例
  3. 延迟测试 — TCP/HTTP Ping 测量端到端延迟
  4. 带宽测试 — 通过代理下载大文件测量吞吐量
  5. 功能检测 — 通过代理访问特定网站检查解锁/可用性
  6. 结果呈现 — 汇总数据生成可视化表格图片

技术门槛不高,核心在于:

  • 如何稳定地启动/停止代理进程
  • 如何准确地测量带宽(排除噪声)
  • 如何判断流媒体解锁状态(跟着网站 API 变化更新)
#测速#FullTclash#stairspeedtest#技术

本文仅作技术原理科普,帮助读者理解代理协议与机场架构。请遵守所在地区法律法规,合理合规使用网络。