MCPcopy Index your code
hub / github.com/byJoey/yx-tools

github.com/byJoey/yx-tools @v2.2.7

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.2.7 ↗ · + Follow
48 symbols 144 edges 2 files 45 documented · 94%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Cloudflare SpeedTest 跨平台自动化工具

Version Python Platform License

一个功能强大的跨平台Cloudflare测速工具,支持全球97个数据中心机场码映射,提供常规测速和优选反代功能。

当前版本:v2.2.3

主要功能

常规测速

  • 全球97个数据中心 - 支持完整的Cloudflare机场码映射
  • 智能测速 - 自动下载最新IP列表,支持自定义参数
  • 结果分析 - 生成详细的CSV格式测速报告
  • IPv4/IPv6支持 - 支持IPv4和IPv6地址测速

小白快速测试

  • 一键测速 - 简单输入3个参数即可开始测试
  • 全自动模式 - 无需选择地区,自动测试所有IP
  • 适合新手 - 专为新手设计,操作简单

优选反代

  • CSV文件处理 - 从测速结果中提取最优IP
  • 反代列表生成 - 自动生成ips_ports.txt反代配置
  • 多格式支持 - 兼容各种CSV文件格式

结果上报

  • Cloudflare Workers API - 支持上报到Cloudflare Workers API
  • GitHub仓库上传 - 支持上传到GitHub公开仓库
  • 批量上传 - 支持批量上传优选IP结果
  • 自动格式化 - 自动格式化IP列表(包含注释)

命令行支持

  • 命令行模式 - 支持命令行参数运行
  • 自动化脚本 - 适合集成到自动化流程
  • 参数配置 - 支持所有功能的命令行参数配置

定时任务设置(Linux/OpenWrt)

  • 自动检测环境 - 自动检测Linux和OpenWrt系统
  • Cron任务设置 - 支持设置Cron定时任务
  • 智能检测 - 自动检测是否已有类似任务
  • 灵活管理 - 支持清理现有任务或继续添加
  • 使用绝对路径 - 自动使用绝对路径,确保定时任务正确执行

Docker容器化支持

  • Docker镜像 - 提供官方Docker镜像,开箱即用
  • Docker Compose - 支持Docker Compose一键部署
  • 数据持久化 - 支持挂载数据目录,保存测速结果
  • 多架构支持 - 支持amd64和arm64架构
  • 环境隔离 - 容器化运行,环境干净整洁

支持平台

平台 架构 状态
Windows x64 完全支持
Windows ARM64 完全支持
macOS Intel 完全支持
macOS Apple Silicon 完全支持
Linux x64 完全支持
Linux ARM64 完全支持

快速开始

方法一:交互式模式(推荐新手)

# 克隆项目
git clone https://github.com/byJoey/yx-tools.git
cd yx-tools

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

# 运行程序(交互式模式)
python3 cloudflare_speedtest.py

方法二:命令行模式(推荐自动化)

# 克隆项目
git clone https://github.com/byJoey/yx-tools.git
cd yx-tools

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

# 运行程序(命令行模式)
python3 cloudflare_speedtest.py --mode beginner --count 10 --speed 1 --delay 1000

# 查看帮助
python3 cloudflare_speedtest.py --help

方法三:使用预编译版本

Releases 页面下载对应平台的可执行文件:

  • CloudflareSpeedTest-windows-amd64.exe - Windows x64
  • CloudflareSpeedTest-macos-amd64 - macOS Intel
  • CloudflareSpeedTest-macos-arm64 - macOS Apple Silicon
  • CloudflareSpeedTest-linux-amd64 - Linux x64
  • CloudflareSpeedTest-linux-arm64 - Linux ARM64

方法四:使用Docker(推荐容器化部署)

直接拉取预构建镜像(最简单)

# 拉取最新镜像
docker pull ghcr.io/byjoey/yx-tools:latest

# 运行容器(交互模式 - 前台运行)
# 如果设置了定时任务,容器会自动保持运行
docker run -it --name cloudflare-speedtest \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  --restart unless-stopped \
  ghcr.io/byjoey/yx-tools:latest

# 运行容器(交互模式 - 后台运行,退出终端不中断)
# 推荐方式:先后台运行,再进入容器设置
docker run -d --name cloudflare-speedtest \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  --restart unless-stopped \
  ghcr.io/byjoey/yx-tools:latest

# 然后进入容器设置定时任务
docker exec -it cloudflare-speedtest python3 /app/cloudflare_speedtest.py

# 运行容器(命令行模式)
docker run -it --rm \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  ghcr.io/byjoey/yx-tools:latest \
  --mode beginner --count 10 --speed 1 --delay 1000

# 拉取特定版本
docker pull ghcr.io/byjoey/yx-tools:v2.2.3

# 查看所有可用标签
# 访问: https://github.com/byJoey/yx-tools/pkgs/container/yx-tools

使用Docker Compose(推荐)

# 克隆项目
git clone https://github.com/byJoey/yx-tools.git
cd yx-tools

# 创建数据目录
mkdir -p data config

# 使用Docker Compose运行(交互模式)
docker-compose run --rm cloudflare-speedtest

# 使用Docker Compose运行(命令行模式)
docker-compose run --rm cloudflare-speedtest --mode beginner --count 10 --speed 1 --delay 1000

本地构建镜像

# 克隆项目
git clone https://github.com/byJoey/yx-tools.git
cd yx-tools

# 构建镜像
docker build -t cloudflare-speedtest:latest .

# 运行容器(交互模式)
docker run -it --rm \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  cloudflare-speedtest:latest

# 运行容器(命令行模式)
docker run -it --rm \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  cloudflare-speedtest:latest \
  --mode beginner --count 10 --speed 1 --delay 1000

# 后台运行并设置定时任务
docker run -d --name cloudflare-speedtest \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  --restart unless-stopped \
  cloudflare-speedtest:latest \
  --mode beginner --count 10 --speed 1 --delay 1000

Docker内定时任务设置

容器内已集成cron服务,支持在容器内设置定时任务,定时任务会自动持久化到 /app/config/crontab 文件,容器重启后会自动恢复

方法一:交互模式设置(推荐)

方式A:前台运行(使用 -it)

# 1. 前台运行容器(交互模式)
docker run -it --name cloudflare-speedtest \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  --restart unless-stopped \
  ghcr.io/byjoey/yx-tools:latest

# 2. 在交互模式中选择设置定时任务
# 3. 设置完成后,定时任务会自动保存到 ./config/crontab
# 4. 容器会保持运行,定时任务会按计划执行
# 5. 使用 Ctrl+P, Ctrl+Q 分离容器(不停止容器)
# 6. 或者直接关闭终端,容器会继续运行(因为设置了 --restart unless-stopped)
# 7. 即使容器重启,定时任务也会自动恢复

方式B:后台运行(使用 -d,推荐)

# 1. 后台运行容器
docker run -d --name cloudflare-speedtest \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  --restart unless-stopped \
  ghcr.io/byjoey/yx-tools:latest

# 2. 进入容器设置定时任务(交互模式)
docker exec -it cloudflare-speedtest python3 /app/cloudflare_speedtest.py

# 3. 在交互模式中选择设置定时任务
# 4. 设置完成后,定时任务会自动保存到 ./config/crontab
# 5. 容器会保持运行,定时任务会按计划执行
# 6. 退出终端不影响容器运行
# 7. 即使容器重启,定时任务也会自动恢复

方法二:使用环境变量自动设置

docker-compose.yml 中配置:

environment:
  - CRON_SCHEDULE=0 2 * * *  # 每天凌晨2点
  - CRON_COMMAND=python3 /app/cloudflare_speedtest.py --mode beginner --count 10 --speed 1 --delay 1000

或使用Docker命令:

docker run -d --name cloudflare-speedtest \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  -e CRON_SCHEDULE="0 2 * * *" \
  -e CRON_COMMAND="python3 /app/cloudflare_speedtest.py --mode beginner --count 10 --speed 1 --delay 1000" \
  --restart unless-stopped \
  ghcr.io/byjoey/yx-tools:latest

方法三:手动编辑crontab

# 进入容器
docker exec -it cloudflare-speedtest bash

# 编辑crontab
crontab -e

# 查看定时任务
crontab -l

# 退出容器后,定时任务会自动保存

Cron时间格式示例: - 0 2 * * * - 每天凌晨2点 - 0 */6 * * * - 每6小时 - */30 * * * * - 每30分钟 - 0 3 * * 1 - 每周一凌晨3点

定时任务持久化说明: - ✅ 定时任务自动保存到 ./config/crontab 文件 - ✅ 容器重启后自动恢复定时任务 - ✅ 每5分钟自动保存一次,确保不丢失 - ✅ 退出终端不影响容器运行(使用 -d 后台运行)

Docker使用说明

  • 预构建镜像:可直接从 GitHub Container Registry 拉取,无需本地构建
  • 镜像地址ghcr.io/byjoey/yx-tools:latest
  • 定时任务:容器内已集成cron服务,支持在容器内设置定时任务(容器需24小时运行)
  • 定时任务持久化:定时任务自动保存到 ./config/crontab,容器重启后自动恢复
  • 后台运行:使用 -d 参数后台运行,退出终端不影响容器运行
  • 数据持久化:结果文件会保存在 ./data 目录中
  • 配置文件:配置文件会保存在 ./config 目录中(包括crontab)
  • 网络访问:容器需要网络访问来下载IP列表和上传结果
  • 时区设置:默认使用 Asia/Shanghai 时区
  • 架构支持:镜像包含 amd64 和 arm64 版本的 CloudflareST 可执行文件,支持多架构自动选择

容器管理命令

# 查看容器状态
docker ps -a | grep cloudflare-speedtest

# 查看容器日志
docker logs cloudflare-speedtest

# 查看定时任务
docker exec -it cloudflare-speedtest crontab -l

# 编辑定时任务
docker exec -it cloudflare-speedtest crontab -e

# 停止容器
docker stop cloudflare-speedtest

# 启动容器(定时任务会自动恢复)
docker start cloudflare-speedtest

# 重启容器(定时任务会自动恢复)
docker restart cloudflare-speedtest

# 删除容器(不会删除数据,数据在挂载的目录中)
docker rm cloudflare-speedtest

独立网络配置(软路由环境)

在软路由环境中使用Docker时,建议为容器分配独立IP,并在软路由中将该IP设置为不走代理。

方法一:使用 Docker Compose 配置独立网络

# docker-compose.yml
version: '3.8'

services:
  cloudflare-speedtest:
    build:
      context: .
      dockerfile: Dockerfile
    image: cloudflare-speedtest:latest
    container_name: cloudflare-speedtest
    volumes:
      - ./data:/app/data
      - ./config:/app/config
    networks:
      isolated_network:
        ipv4_address: 172.20.0.10  # 指定独立IP
    environment:
      - TZ=Asia/Shanghai
      - PYTHONUNBUFFERED=1
    restart: unless-stopped

networks:
  isolated_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16
          gateway: 172.20.0.1

方法二:使用 Docker 命令配置独立网络

# 1. 创建独立网络
docker network create \
  --driver bridge \
  --subnet=172.20.0.0/16 \
  --gateway=172.20.0.1 \
  isolated_network

# 2. 运行容器并指定独立IP
docker run -d --name cloudflare-speedtest \
  --network isolated_network \
  --ip 172.20.0.10 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  --restart unless-stopped \
  ghcr.io/byjoey/yx-tools:latest

方法三:使用 Macvlan 网络(推荐软路由)

Macvlan 网络允许容器直接使用物理网络接口,获得独立的 MAC 地址和 IP:

# 1. 创建 Macvlan 网络(需要根据实际网络接口调整)
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 \
  macvlan_network

# 2. 运行容器并指定独立IP
docker run -d --name cloudflare-speedtest \
  --network macvlan_network \
  --ip 192.168.1.100 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/config:/app/config \
  --restart unless-stopped \
  ghcr.io/byjoey/yx-tools:latest

软路由代理设置

配置独立IP后,需要在软路由中将该IP设置为不走代理:

  1. OpenWrt/Lede
  2. 进入"网络" → "负载均衡" → "规则"
  3. 添加规则:源地址为容器IP(如 192.168.1.100),动作选择"直连"或"不走代理"

  4. PassWall/Clash

  5. 进入"访问控制" → "局域网设备"
  6. 添加设备规则:IP地址为容器IP,策略选择"直连"或"DIRECT"

  7. V2Ray/Xray

  8. 在路由规则中添加: json { "type": "field", "ip": ["192.168.1.100/32"], "outboundTag": "direct" }

注意事项: - 确保容器IP与软路由在同一网段 - 确保容器IP未被其他设备占用 - 配置后测试容器网络连接是否正常 - Macvlan 网络需要根据实际网络接口名称调整 parent 参数(如 eth0br-lan 等)

使用指南

方法一:交互式模式(推荐新手)

macOS/Linux 权限设置

chmod 755 可执行文件拽到终端回车
可执行文件拽到终端回车
如果还是不行 请执行sudo spctl --master-disable
依然不行 xattr -d com.apple.quarantine 可执行文件拽到终端回车

运行程序

python3 cloudflare_speedtest.py

选择功能:

功能选择:
  1. 小白快速测试 - 简单输入,适合新手
  2. 常规测速 - 测试指定机场码的IP速度
  3. 优选反代 - 从CSV文件生成反代IP列表

请选择功能 [默认: 1]: 1

方法二:命令行模式(推荐自动化)

命令行模式适合自动化脚本、定时任务、CI/CD等场景,支持所有功能通过参数配置。

基本用法

小白快速测试模式

# 使用默认参数(10个IP,速度1MB/s,延迟1000ms)
python3 cloudflare_speedtest.py --mode beginner

# 指定测试参数
python3 cloudflare_speedtest.py --mode beginner --count 20 --speed 2 --delay 500

# 使用IPv6测试
python3 cloudflare_speedtest.py --mode beginner --ipv6

# 高质量测试(50个IP,速度5MB/s,延迟200ms)
python3 cloudflare_speedtest.py --mode beginner --count 50 --speed 5 --delay 200

# 快速测试(5个IP,速度0.5MB/s,延迟2000ms)
python3 cloudflare_speedtest.py --mode beginner --count 5 --speed 0.5 --delay 2000

常规测速模式

# 测试指定地区(香港)
python3 cloudflare_speedtest.py --mode normal --region HKG --count 10

# 测试指定地区(新加坡),指定速度和延迟
python3 cloudflare_speedtest.py --mode normal --region SIN --count 20 --speed 5 --delay 300

# 测试指定地区(东京),使用IPv6
python3 cloudflare_speedtest.py --mode normal --region NRT --count 15 --ipv6

# 测试指定地区(洛杉矶),高质量测试
python3 cloudflare_speedtest.py --mode normal --region LAX --count 50 --speed 10 --delay 200

优选反代模式

# 从默认CSV文件生成反代列表
python3 cloudflare_speedtest.py --mode proxy

# 从指定CSV文件生成反代列表
python3 cloudflare_speedtest.py --mode proxy --csv result.csv

# 从自定义路径的CSV文件生成反代列表
python3 cloudflare_speedtest.py --mode proxy --csv /path/to/result.csv

完整参数说明

参数 说明 默认值 必需 示例
--mode 运行模式 - beginner/normal/proxy
--ipv6 使用IPv6(默认IPv4) IPv4 --ipv6
--count 测试IP数量 10 --count 20
--speed 下载速度下限 (MB/s) 1.0 --speed 2
--delay 延迟上限 (ms) 1000 --delay 500
--region 地区码(常规测速模式需要) - ⚠️ --region HKG
--csv CSV文件路径(优选反代模式) result.csv --csv result.csv
--upload 上传方式 none api/github/none
--worker-domain Worker域名(API上传需要) - ⚠️ --worker-domain example.com
--uuid UUID或路径(API上传需要) - ⚠️ --uuid abc123
--repo GitHub仓库路径(GitHub上传需要) - ⚠️ --repo owner/repo
--token GitHub Token(GitHub上传需要) - ⚠️ --token ghp_xxx
--file-path GitHub文件路径 cloudflare_ips.txt --file-path ips.txt
--upload-count 上传IP数量 10 --upload-count 20
--clear 上传前清空现有IP(避免IP累积,推荐使用) false --clear

说明: - ✅ 必需参数:必须提供 - ⚠️ 条件必需:在特定模式下需要 - ❌ 可选参数:可以不提供,使用默认值

使用场景示例

场景1:定时自动测速并上报到API

# 每天凌晨2点自动测速并上报(清空现有IP,推荐)
python3 cloudflare_speedtest.py --mode beginner \
  --count 20 --speed 2 --delay 500 \
  --upload api \
  --worker-domain example.com --uuid abc123 \
  --upload-count 20 --clear

# 每天凌晨2点自动测速并上报(IP会累积)
python3 cloudflare_speedtest.py --mode beginner \
  --count 20 --speed 2 --delay 500 \
  --upload api \
  --worker-domain example.com --uuid abc123 \
  --upload-count 20

场景2:测试多个地区并上传到GitHub

# 测试香港地区
python3 cloudflare_speedtest.py --mode normal \
  --region HKG --count 20 --speed 5 --delay 300 \
  --upload github \
  --repo username/cloudflare-ips --token ghp_xxx \
  --file-path hkg_ips.txt

# 测试新加坡地区
python3 cloudflare_speedtest.py --mode normal \
  --region SIN --count 20 --speed 5 --delay 300 \
  --upload github \
  --repo username/cloudflare-ips --token ghp_xxx \
  --file-path sin_ips.txt

场景3:快速测试IPv6

# 快速测试IPv6地址
python3 cloudflare_speedtest.py --mode beginner \
  --ipv6 --count 10 --speed 1 --delay 1000

场景4:高质量测试(适合对速度要求高的场景)

# 测试50个IP,速度要求5MB/s以上,延迟200ms以内
python3 cloudflare_speedtest.py --mode beginner \
  --count 50 --speed 5 --delay 200

场景5:批量生成反代列表

# 从多个CSV文件生成反代列表
python3 cloudflare_speedtest.py --mode proxy --csv result1.csv
python3 cloudflare_speedtest.py --mode proxy --csv result2.csv
python3 cloudflare_speedtest.py --mode proxy --csv result3.csv

结果上报详细说明

上报到 Cloudflare Workers API

完整示例(清空现有IP,推荐):

python3 cloudflare_speedtest.py --mode beginner \
  --count 20 --speed 2 --delay 500 \
  --upload api \
  --worker-domain example.com \
  --uuid abc123 \
  --upload-count 20 \
  --clear

完整示例(IP会累积): ```bash python3 cloudflare_speedtest.py --mode beginner \ --count 20 --speed 2 --delay 500 \ --upload api \ --worker-dom

Core symbols most depended-on inside this repo

check_pyinstaller
called by 1
build.py
install_pyinstaller
called by 1
build.py
build_executable
called by 1
build.py
main
called by 1
build.py

Shape

Function 45
Method 2
Class 1

Languages

Python100%

Modules by API surface

cloudflare_speedtest.py44 symbols
build.py4 symbols

For agents

$ claude mcp add yx-tools \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact