Skip to main content

CDN speed testing and management tool

Project description

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 等多平台

快速开始

安装

# 使用 pip 安装
pip 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. 安装
# 使用 pip 安装
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
  1. 使用
# 基本用法(使用邮箱)
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=1000

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=1000

使用 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: 2.0)
  -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, --ipurl 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:
  -g, --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(默认:2.0)
-P / --port: 速度测试端口(0-65535)
-u / --url: 速度测试 URL
-T / --timeout: 速度测试超时时间,单位秒(默认:600)
-q / --quantity: 创建的 DNS 记录数量(默认:0 = 无限制)

IP 数据源:

-i / --ipurl: 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 列表下载

日志和调试:

-g / --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=1000
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

# CloudFlare 官方测试端点
https://speed.cloudflare.com/__down?during=download&bytes=104857600

# 第三方 CloudFlare 测试端点
https://cf.xiu2.xyz/url

bytes 为文件大小。104857600100MB

GCore

香港:

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。

CacheFly

https://cachefly.cachefly.net/100mb.test

AWS CloudFront

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

许可证

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

仓库镜像

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cdnbestip-0.1.0.tar.gz (55.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cdnbestip-0.1.0-py3-none-any.whl (53.5 kB view details)

Uploaded Python 3

File details

Details for the file cdnbestip-0.1.0.tar.gz.

File metadata

  • Download URL: cdnbestip-0.1.0.tar.gz
  • Upload date:
  • Size: 55.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.19

File hashes

Hashes for cdnbestip-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6cea63bbddc6e777e8c248de7deab5441c4c99556e01870cf9a61e90e78b79ca
MD5 cdf916e9218866cfa3525e72d40b1a4e
BLAKE2b-256 09c03d8e1250fcd5a29b56f07be48184fed536ea60b599b55b8da54d8011c065

See more details on using hashes here.

File details

Details for the file cdnbestip-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: cdnbestip-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 53.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.19

File hashes

Hashes for cdnbestip-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 96b7535441dde782a33c3e40efd4450102b0b86701d657293c9a7ca3db019459
MD5 650de74551aa86766aa93cc3f64a11dc
BLAKE2b-256 b84f92bd1b3826f267cfa8521fca471a9f5fde49812fea5a777a151c410ad343

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page