Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

idevsig/cdnbestip

Repository files navigation

CDNBestIP

一个基于 CloudflareSpeedTest 获取最佳 CDN IP 的工具,用于自动测速并更新最佳的 CDN IP 到 Cloudflare DNS 记录。

功能特点

  • 🚀 自动化测速:基于 CloudflareSpeedTest 进行 CDN IP 速度测试
  • 🌐 DNS 管理:自动更新 CloudFlare DNS 记录到最佳 IP
  • 📊 多源支持:支持 CloudFlare、GCore、CloudFront、AWS 等 IP 数据源
  • 🎯 智能配置:根据 IP 源自动配置相应的测试端点
  • 🔧 灵活参数:完整的命令行界面与环境变量支持
  • 🐳 容器化:Docker 支持,便于部署和定时任务
  • 📝 详细日志:多级别日志记录,便于调试和监控
  • 🔒 安全认证:支持 API 令牌和 API 密钥两种认证方式
  • 高性能:支持并发测试和结果缓存
  • 🌍 跨平台:支持 Windows、Linux、macOS 等多平台

快速开始

安装

Python 版本要求: Python 3.13+

PyPI 包地址: https://pypi.org/project/cdnbestip/

# 使用 pip 安装
pip install cdnbestip
uv tool install cdnbestip
# 使用 pip + git 安装
pip install git+https://github.com/idev-sig/cdnbestip.git
# 或使用 uv 安装
uv tool install git+https://github.com/idev-sig/cdnbestip.git
# 指定版本
uv tool install git+https://github.com/idev-sig/cdnbestip.git@v0.1.0

基本用法

# 运行速度测试
cdnbestip -d example.com -p cf -s 2
# 测试并更新 DNS 记录
cdnbestip -t YOUR_API_TOKEN -d example.com -p cf -s 2 -n

详细使用说明请参阅 使用指南

Docker 支持

镜像获取

本地构建

docker buildx bake

使用预构建镜像

版本标签: latest, main, <TAG>

Registry Image
Docker Hub idevsig/cdnbestip
GitHub Container Registry ghcr.io/idev-sig/cdnbestip
Tencent Cloud Container Registry(SG) sgccr.ccs.tencentyun.com/idevsig/cdnbestip
Aliyun Container Registry(GZ) registry.cn-guangzhou.aliyuncs.com/idevsig/cdnbestip
# 拉取镜像
docker pull idevsig/cdnbestip:latest
# 或者
docker pull ghcr.io/idev-sig/cdnbestip:latest

使用

Python 使用方式

先决条件:

  1. 安装(见上一节)

  2. 使用

# 基本用法(使用邮箱)
cdnbestip -a user@example.com -k api_key -d example.com -p cf -s 5 -n -o
# 使用 GCore IP 源(自动使用 GCore 测试端点)
cdnbestip -a user@example.com -k api_key -d example.com -p gc -s 5 -n -o -i gc
# 使用 GCore IP 源 + 自定义测试 URL
cdnbestip -a user@example.com -k api_key -d example.com -p gc -s 5 -n -o -i gc -u https://hk2-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=100

Docker 使用方式

单次运行

# 基本用法(使用邮箱)
docker run --rm idevsig/cdnbestip:latest cdnbestip -a user@example.com -k api_key -d example.com -p cf -s 5 -n -o
# 使用 GCore IP 源(自动使用 GCore 测试端点)
docker run --rm idevsig/cdnbestip:latest cdnbestip -a user@example.com -k api_key -d example.com -p gc -s 5 -n -o -i gc
# 使用 GCore IP 源 + 自定义测试 URL
docker run --rm idevsig/cdnbestip:latest cdnbestip -a user@example.com -k api_key -d example.com -p gc -s 5 -n -o -i gc -u https://hk2-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=100

使用 Docker Compose

  1. 创建 docker-compose.yml 文件:
services:
 cdnbestip:
 image: idevsig/cdnbestip:latest
 container_name: cdnbestip
 restart: unless-stopped
 environment:
 - CLOUDFLARE_EMAIL=user@example.com
 - CLOUDFLARE_API_KEY=api_key
 - TZ=Asia/Shanghai
 command: ["daemon"]
  1. 启动服务:
docker compose up -d
  1. 配置定时任务:
# 添加定时计划 (每天凌晨4:15运行)
docker exec cdnbestip sh -c "echo '15 4 * * * cd /app; cdnbestip -d example.com -p cf -r -n -q 5' | crontab -"
# 启用定时服务
docker exec -d cdnbestip crond -b -l 8
# 管理定时服务
# 停止
docker exec cdnbestip pkill crond
# 重启
docker exec cdnbestip pkill -HUP crond

文档

帮助

usage: cdnbestip [-h] [-a EMAIL] [-k API_KEY] [-t API_TOKEN] [-d DOMAIN] [-p PREFIX] [--type TYPE] [-s THRESHOLD] [-P PORT] [-u URL]
 [-T SECONDS] [-q COUNT] [-i SOURCE] [-r] [-n] [-o] [-c URL] [-e STRING] [--debug] [-v]
 [--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [--no-console-log] [--no-file-log] [--version]
CloudFlare DNS speed testing and management tool
options:
 -h, --help show this help message and exit
 --version show program's version number and exit
CloudFlare Credentials:
 -a, --account EMAIL CloudFlare account email
 -k, --key API_KEY CloudFlare API key
 -t, --token API_TOKEN CloudFlare API token (alternative to key+email)
DNS Settings:
 -d, --domain DOMAIN Domain name (required for DNS operations)
 -p, --prefix PREFIX DNS record prefix (required for DNS operations)
 -y, --type TYPE DNS record type (default: A)
Speed Test Settings:
 -s, --speed THRESHOLD
 Download speed threshold in MB/s (default: 0.0, 0 means no speed filtering)
 -P, --port PORT Speed test port (0-65535)
 -u, --url URL Speed test URL
 -T, --timeout SECONDS
 Speed test timeout in seconds (default: 600)
 -q, --quantity COUNT Number of DNS records to create (default: 0 = unlimited)
IP Data Source:
 -i, --ip-url SOURCE IP data source: cf, gc, ct, aws, or custom URL
Operations:
 -r, --refresh Force refresh result.csv file
 -n, --dns Update DNS records after speed test
 -o, --only Only update one DNS record (fastest IP)
Advanced Options:
 -c, --cdn URL CDN URL for file acceleration
 -e, --extend STRING Extended parameters for CloudflareSpeedTest (use -e="-param" or -e "\\-param")
 -x, --proxy URL Proxy URL for Cloudflare API and IP list downloads
Logging and Debugging:
 -D, --debug Enable debug mode with detailed logging
 -v, --verbose Enable verbose output
 -L, --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
 Set logging level (default: INFO)
 -C, --no-console-log Disable console logging
 -F, --no-file-log Disable file logging
Examples:
 cdnbestip -a user@example.com -k api_key -d example.com -p cf -s 2 -n -o
 
 export CLOUDFLARE_API_KEY="api_key"
 export CLOUDFLARE_EMAIL="user@example.com"
 cdnbestip -d example.com -p cf -s 2 -n -o
IP Data Sources:
 cf - CloudFlare IPs
 gc - GCore IPs 
 ct - CloudFront IPs
 aws - Amazon AWS IPs
 <url> - Custom IP data URL
Zone Types:
 A, AAAA, CNAME, MX, TXT, SRV, NS, PTR

参数说明

CloudFlare 认证:

-a / --account: CloudFlare 账号邮箱 -k / --key: CloudFlare API 密钥
-t / --token: CloudFlare API 令牌(推荐,可替代 key+email)

DNS 设置:

-d / --domain: 域名(DNS 操作必需)
-p / --prefix: DNS 记录前缀(DNS 操作必需)
-y / --type: DNS 记录类型(默认:A)

速度测试设置:

-s / --speed: 下载速度阈值,单位 MB/s(默认:0.0,0表示不进行速度过滤,仅使用延迟过滤)
-P / --port: 速度测试端口(0-65535)
-u / --url: 速度测试 URL
-T / --timeout: 速度测试超时时间,单位秒(默认:600)
-q / --quantity: 创建的 DNS 记录数量(默认:0 = 无限制)

IP 数据源:

-i / --ip-url: IP 数据源:cf, gc, ct, aws 或自定义 URL

操作选项:

-r / --refresh: 强制刷新 result.csv 文件
-n / --dns: 测试后更新 DNS 记录
-o / --only: 仅更新一条 DNS 记录(最快的 IP)

高级选项:

-c / --cdn: 文件加速的 CDN URL
-e / --extend: CloudflareSpeedTest 的扩展参数 (使用 -e="-参数" 或 -e "\-参数")
-x / --proxy: 代理服务器 URL,用于 Cloudflare API 和 IP 列表下载

日志和调试:

-D / --debug: 启用调试模式和详细日志
-v / --verbose: 启用详细输出
-L / --log-level: 设置日志级别
-C / --no-console-log: 禁用控制台日志
-F / --no-file-log: 禁用文件日志

认证方式

  • 方式一(推荐):使用 API 令牌 -t 或设置环境变量 CLOUDFLARE_API_TOKEN
  • 方式二:使用 API 密钥 + 邮箱 -k + -a 或设置环境变量 CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL

账号参数支持格式:

  • 邮箱格式:user@example.com
  • 账号ID格式:b9b779dc8c2e097c2a467261a8fa0000(32位十六进制字符串)

获取 API 令牌:CloudFlare Dashboard -> API Tokens -> Create Token
获取 API 密钥:CloudFlare Dashboard -> API Keys -> Global API Key

代理配置

工具支持通过代理服务器进行 Cloudflare API 调用和 IP 列表下载。支持的代理类型:

  • HTTP 代理:http://proxy.example.com:8080
  • HTTPS 代理:https://proxy.example.com:8080

使用方式:

# 命令行参数(长参数)
cdnbestip --proxy http://proxy.example.com:8080 -d example.com -p cf -s 2 -n
# 命令行参数(短参数)
cdnbestip -x http://proxy.example.com:8080 -d example.com -p cf -s 2 -n
# 环境变量
export CDNBESTIP_PROXY="http://proxy.example.com:8080"
cdnbestip -d example.com -p cf -s 2 -n

注意: 代理仅用于 Cloudflare API 调用和 IP 列表下载,不影响 CloudflareSpeedTest 工具的测速过程。

IP 数据源和测试端点

自动配置(推荐)

工具会根据选择的 IP 数据源自动配置相应的测试端点:

IP 源 提供商 自动测试端点 需要 -u 参数?
cf CloudFlare https://cf.xiu2.xyz/url
gc GCore https://hk2-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=100
ct CloudFront
aws Amazon AWS
自定义 URL 自定义

使用示例

# 无 IP 源 - 使用 CloudflareSpeedTest 默认设置
cdnbestip -d example.com -p cf -s 2 -n
# CloudFlare IP 源 - 自动使用 CF 测试端点
cdnbestip -i cf -d example.com -p cf -s 2 -n
# GCore IP 源 - 自动使用 GCore 测试端点
cdnbestip -i gc -d example.com -p gc -s 2 -n
# CloudFront IP 源 - 需要指定测试 URL
cdnbestip -i ct -u https://example.cloudfront.net/test -d example.com -p ct -s 2 -n
# 自定义测试 URL(覆盖默认设置)
cdnbestip -i gc -u https://custom-test.example.com/test -d example.com -p gc -s 2 -n
# 使用扩展参数传递给 CloudflareSpeedTest
cdnbestip -d example.com -p cf -e="-cfcolo HKG" -s 2 -n
cdnbestip -d example.com -p cf -e "\-cfcolo HKG -a 1" -s 2 -n
# 使用代理服务器
cdnbestip -d example.com -p cf --proxy http://proxy.example.com:8080 -s 2 -n

手动指定测试 URL(-u--url 参数)

# CloudFlare 官方测试端点
https://speed.cloudflare.com/__down?during=download&bytes=104857600
# 第三方 CloudFlare 测试端点
https://cf.xiu2.xyz/url

bytes 为文件大小。104857600100MB

香港:

https://hk2-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=100

日本:

https://cc1-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=100

新加坡:

https://sg1-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=100

ckSize 为文件大小,单位 MB。可自行修改,最大为 100MB。

https://cachefly.cachefly.net/100mb.test
# AWS 静态资源端点示例
https://d1.awsstatic.com/logos/aws-logo-lockups/poweredbyaws/PB_AWS_logo_RGB_REV_SQ.8c88ac215fe4e441dc42865dd6962ed4f444a90d.png

许可证

本项目采用 Apache License 2.0 许可证。

仓库镜像

About

优选 CDN IP(CloudFlare、Gcore、AWS 或自定义等)

Resources

License

Stars

Watchers

Forks

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /