[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1171":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":39,"discoverSource":40},1171,"cfnb","xinyitang3\u002Fcfnb","xinyitang3","这是一个全自动的 Cloudflare CDN 节点优选工具。它通过 TCP 延迟筛选 + IP 可用性二次检测 + HTTP检测 + 真实带宽测速 四重机制，从多个公开数据源中聚合节点，自动识别并解析任意格式（标准代码、中文名、emoji国旗、JSON等），筛选出当前网络环境下速度最快、可用性最高的 Cloudflare IP，并支持自动更新至 Cloudflare DNS 以及同步至 GitHub 仓库，同时支持微信实时通知。","",null,"Python",514,194,2,0,36,63,134,108,10.87,"MIT License",false,"main",true,[26,27,28,29,30,31,32,33,34,35],"automation","bandwidth-test","cloudflare","cloudflare-cdn","cross-platform","ip-scanner","network-optimization","proxy","python","wxpusher","2026-06-12 02:00:24","---\n\n# Cloudflare IP 优选工具\n\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fxinyitang3\u002Fcfnb?style=social)](https:\u002F\u002Fgithub.com\u002Fxinyitang3\u002Fcfnb\u002Fstargazers)\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-Windows%20%7C%20Linux-blue)]()\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green)]()\n[![Last Commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fxinyitang3\u002Fcfnb?label=Last%20Commit)](https:\u002F\u002Fgithub.com\u002Fxinyitang3\u002Fcfnb\u002Fcommits)\n[![Repo Size](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frepo-size\u002Fxinyitang3\u002Fcfnb?label=Repo%20Size)](https:\u002F\u002Fgithub.com\u002Fxinyitang3\u002Fcfnb)\n![Telegram](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTelegram-ID_5126237436-26A5E4?logo=telegram)\n\n> ⭐ **如果觉得好用，点个 Star 支持一下～**\n\n这是一个全自动的 **Cloudflare CDN 节点优选工具**。它通过 **TCP 延迟筛选** + **IP 可用性二次检测** + **真实带宽测速** 三重机制，从多个公开数据源中聚合节点，自动识别并解析任意格式（标准代码、中文名、emoji国旗、JSON等），筛选出当前网络环境下速度最快、可用性最高的 Cloudflare IP，并支持**自动更新至 Cloudflare DNS** 以及**同步至 GitHub 仓库**，同时支持微信实时通知。\n\n> [!IMPORTANT]\n> **跨平台支持**：本工具同时兼容 **Windows** 和 **Linux** 操作系统。\n> - Windows 自动推送依赖 PowerShell 脚本 `git_sync.ps1`\n> - Linux 自动推送依赖 Bash 脚本 `git_sync.sh`\n\n---\n\n### 📍 快速导航\n- 🚀 [我要部署](#-部署步骤)（Windows \u002F Linux 命令对照）\n- 🔐 [我要获取 Token](#-获取必要令牌重要)（GitHub \u002F Cloudflare \u002F WxPusher 三合一教程）\n- ⚙️ [我要调整参数](#%EF%B8%8F-配置说明完整参数详解)\n- ☁️ [我要配置 Cloudflare DNS](#%EF%B8%8F-配置-cloudflare-dns-自动更新)\n- 📤 [我要配置 GitHub 同步](#-配置-github-自动同步)\n- 🔧 [Fork 后无法推送？一键修复](#-fork-后无法推送一键修复)\n- 🔗 [对接 EdgeTunnel 指南](#-%E5%AF%B9%E6%8E%A5-edgetunnel-20-%E6%8C%87%E5%8D%97)\n- ❓ [常见问题](#-常见问题)\n\n---\n\n## ✨ 功能特性\n\n| 模块 | 说明 |\n| :--- | :--- |\n| 🌐 **多模式筛选** | 全局最优 TopN \u002F 分国家最优 TopN |\n| ⚡ **TCP 连接测试** | 并发测延迟，可设成功率阈值 |\n| 🔍 **可用性二次检测** | API 验证代理能力 |\n| 📶 **真实带宽测速** | curl 下载测速，实测吞吐量 |\n| 🧩 **多源自适应聚合** | 支持多个数据源，自动识别并解析任意格式（标准代码、中文名、emoji国旗、JSON等），统一转换为标准格式 |\n| ⚙️ **前置过滤（按序执行）** | TCP 测试前按序：端口过滤 → 黑名单过滤 → 白名单过滤（均可开关） |\n| 🚫 **DNS 黑名单** | DNS 更新时剔除指定国家节点（**仅作用于 DNS 更新环节**） |\n| 🛡️ **IPv6 落地过滤** | 过滤落地仅 IPv6 的节点，保留 IPv4\u002F双栈节点（**仅作用于 DNS 更新环节**） |\n| ☁️ **Cloudflare DNS 更新** | 批量替换同名 A 记录 |\n| 📬 **微信实时通知** | 集成 WxPusher，异常\u002F结果推送 |\n| 🔄 **定时自动运行** | Windows 计划任务 \u002F Linux cron，每 5 分钟 |\n| 🚀 **一键部署** | `setup.ps1` \u002F `setup.sh` 自动安装依赖并配置 |\n| 📤 **GitHub 自动同步** | `ip.txt` 推送至仓库，方便订阅 |\n| 🔒 **隐私保护** | `.gitignore` 忽略敏感文件 |\n| 🖥️ **跨平台兼容** | 同时支持 Windows 和 Linux |\n| 🔧 **Fork 修复** | 内置 `update_fork.ps1` \u002F `update_fork.sh`，解决 fork 后的历史冲突与认证问题 |\n\n---\n\n## 📦 文件清单\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `main.py` | 核心优选程序（抓取、测试、筛选、更新、推送） |\n| `config.json` | 所有运行参数的配置文件（含详细注释） |\n| `git_sync.ps1` | Windows 推送脚本（强制推送 `ip.txt` 到 GitHub） |\n| `git_sync.sh` | Linux 推送脚本（强制推送 `ip.txt` 到 GitHub） |\n| `setup.ps1` | Windows 一键部署脚本（安装依赖并配置计划任务） |\n| `setup.sh` | Linux 一键部署脚本（安装依赖并配置 cron） |\n| `ip.txt` | 最终优选节点列表（每次运行覆盖） |\n| `update_fork.ps1` | Windows 仓库修复脚本（解决 fork 后冲突\u002F认证） |\n| `update_fork.sh` | Linux 仓库修复脚本（解决 fork 后冲突\u002F认证） |\n\n---\n\n## 🖥️ 系统要求\n\n- **操作系统**：Windows 10+ \u002F Windows Server 2016+ 或 Linux（Ubuntu\u002FDebian\u002FCentOS 等）\n- **必备软件**：\n  - **Python 3.7+**\n  - **Git**\n  - **curl**（需在系统 PATH 中可用）\n- **Python 依赖**：`requests` 库\n\n---\n\n## 🚀 部署步骤\n\n### 通用前置步骤\n\n1. **获取项目文件**  \n   - **方式一（推荐）**：点击本仓库页面的绿色 `Code` 按钮 → `Download ZIP`，下载压缩包后解压到本地。  \n   - **方式二（熟悉 Git 的用户）**：使用命令行克隆仓库：\n     ```bash\n     git clone https:\u002F\u002Fgithub.com\u002F你的用户名\u002F仓库名.git\n     cd 仓库名\n     ```\n\n2. **配置各项令牌（见下一节）**  \n   根据需求获取并填写 GitHub Token、Cloudflare API Token 和 WxPusher 凭证。\n\n> 💡 部署脚本会自动安装依赖、创建 `.gitignore` 并配置定时任务（每 5 分钟整点运行）。\n\n---\n\n### 🔐 获取必要令牌（重要）\n\n若你希望启用 GitHub 自动推送、Cloudflare DNS 更新或微信通知，请参考下表获取对应令牌。\n\n| GitHub Personal Access Token | Cloudflare API Token | WxPusher 微信通知 |\n| :---: | :---: | :---: |\n| **1.** 登录 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) | **1.** 进入域名概览页，点击右侧API栏的获取您的 API 令牌 | **1.** 访问 [WxPusher 后台](http:\u002F\u002Fwxpusher.zjiecode.com\u002Fadmin\u002F)，微信扫码登录 |\n| **2.** Generate new token (classic)，Note 任意填 | **2.** 点击 创建令牌 → 选择 **编辑区域 DNS** 模板 | **2.** 左侧菜单“应用管理”→“应用信息”→“新增应用”，填写名称后创建 |\n| **3.** **Expiration 必须选 `No expiration`** | **3.** 权限已自动填好（区域 - DNS - 编辑），区域资源选择你的域名 | **3.** 复制保存 AppToken（仅显示一次） |\n| **4.** Select scopes: 仅勾选 **repo**（自动勾全） | **4.** 点击 继续以显示摘要 → 创建令牌 | **4.** 左侧“关注应用”→微信扫码关注公众号 |\n| **5.** Generate token，保存 | **5.** 立即复制并保存令牌（仅显示一次） | **5.** 公众号菜单“我的”→“我的UID”获取 UID |\n| 填入 `git_sync.ps1` \u002F `git_sync.sh` 的 `github_token` | 填入 `config.json` 的 `CF_API_TOKEN` 和 `CF_ZONE_ID` | 填入 `config.json` 的 `WXPUSHER_APP_TOKEN` 和 `WXPUSHER_UIDS` |\n\n> 💡 若不需要某项功能，可跳过对应步骤或在配置中关闭开关：  \n> - 无需微信通知：`config.json` 中设 `ENABLE_WXPUSHER: false`  \n> - 无需 GitHub 推送：`config.json` 中设 `GITHUB_SYNC_MAX_RETRIES: 0`  \n> - 无需 Cloudflare DNS 更新：`config.json` 中设 `CF_ENABLED: false`\n\n---\n\n### Windows 部署\n\n以管理员身份打开 **PowerShell**，逐行执行以下命令：\n\n```powershell\n# 1. 进入项目目录\ncd \"C:\\你的项目路径\\cfnb\"\n\n# 2. 若提示脚本禁用，临时绕过（可选）\nSet-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass\n\n# 3. 运行部署脚本\n.\\setup.ps1\n\n# 4. 编辑推送脚本，填入 GitHub 令牌等信息\nnotepad git_sync.ps1\n\n# 5. 测试运行\npython main.py\n```\n\n### Linux 部署\n\n在终端中逐行执行以下命令：\n\n```bash\n# 1. 进入项目目录\ncd \u002Fpath\u002Fto\u002Fcfnb\n\n# 2. 赋予执行权限\nchmod +x setup.sh\n\n# 3. 运行部署脚本（需要 sudo 安装软件包）\nsudo .\u002Fsetup.sh\n\n# 4. 编辑推送脚本，填入 GitHub 令牌等信息\nnano git_sync.sh\n\n# 5. 测试运行\npython3 main.py\n```\n\n\u003Cdetails>\n\u003Csummary>📝 手动部署详细步骤（点击展开）\u003C\u002Fsummary>\n\n#### Windows 手动部署\n\n1. 安装 [Python 3](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)（勾选 “Add Python to PATH”）。\n2. 安装 [Git](https:\u002F\u002Fgit-scm.com\u002Fdownload\u002Fwin) 和 [curl](https:\u002F\u002Fcurl.se\u002Fwindows\u002F)（curl 需加入 PATH）。\n3. 在项目目录打开命令提示符，安装依赖：\n   ```cmd\n   pip install requests\n   ```\n4. （可选）手动创建计划任务：\n   - 按 `Win + R`，输入 `taskschd.msc` 打开任务计划程序。\n   - 创建任务，名称 `Cloudflare IP 优选`，勾选“不管用户是否登录都要运行”和“使用最高权限运行”。\n   - 触发器：新建 → 开始任务“按预定计划” → 设置“一次”，开始时间为下一个整5分钟时刻；高级设置中勾选“重复任务间隔”，选择“5分钟”，持续时间“无限期”。\n   - 操作：新建 → 操作“启动程序”，程序填写 `python.exe` 路径，参数填写 `main.py` 完整路径，起始于填写项目目录。\n   - 在 **“设置”** 选项卡中，将 **“优先级”** 下拉框设为 **“高”**。\n   - 点击确定，输入 Windows 登录密码保存。\n\n#### Linux 手动部署\n\n1. 安装系统依赖（以 Debian\u002FUbuntu 为例）：\n   ```bash\n   sudo apt update\n   sudo apt install -y python3 python3-pip git curl\n   ```\n2. 安装 Python 依赖：\n   ```bash\n   pip3 install requests\n   ```\n3. 赋予推送脚本执行权限（如果需要）：\n   ```bash\n   chmod +x git_sync.sh\n   ```\n4. （可选）添加 cron 任务：\n   ```bash\n   (crontab -l 2>\u002Fdev\u002Fnull; echo \"*\u002F5 * * * * cd $(pwd) && nice -n -10 \u002Fusr\u002Fbin\u002Fpython3 $(pwd)\u002Fmain.py >> $(pwd)\u002Fcron.log 2>&1\") | crontab -\n   ```\n5. 验证：`crontab -l`\n\n\u003C\u002Fdetails>\n\n---\n\n## 🔧 Fork 后无法推送？一键修复\n\n**适用于 fork 或修改远程仓库后，出现以下任一问题的情况：**\n\n- `git pull` 报错：`fatal: refusing to merge unrelated histories`\n- 推送时每次弹出浏览器要求登录\n\n**运行对应平台的一键修复脚本即可**（前提：已按前文填写好 `config.json` 与推送脚本中的令牌）\n\n| 平台 | 命令 |\n| :--- | :--- |\n| Windows PowerShell | `.\\update_fork.ps1` |\n| Linux | `chmod +x update_fork.sh && .\u002Fupdate_fork.sh` |\n\n脚本会自动完成：\n- 备份现有配置文件（可随时恢复）\n- 设置免认证远程地址\n- 强制对齐本地与远程仓库\n- 将你的令牌安全注入最新版本的文件（不覆盖其他参数）\n\n> 💡 运行成功后，`main.py` 即可正常自动推送，不再有任何冲突或弹窗。\n\n---\n\n## 🕒 定时自动运行说明\n\n| 平台 | 方式 | 行为 |\n| :--- | :--- | :--- |\n| Windows | 计划任务 `Cloudflare IP 优选` | 从下一个整 5 分钟开始，之后每 5 分钟**永久重复** |\n| Linux | cron 定时任务 | 分钟字段为 `*\u002F5`，整点对齐 |\n\n**日志查看**：\n- Windows：任务计划程序中查看历史记录。\n- Linux：`tail -f cron.log`\n\n---\n\n## ⚙️ 配置说明（完整参数详解）\n\n> [!NOTE]\n> 默认参数基于 **2核2G 云服务器** 测试通过。若在 **软路由、树莓派或低配 PC** 上运行，建议适当降低 `MAX_WORKERS`、`BANDWIDTH_WORKERS`。\n\n所有参数均位于 `config.json`，以下为逐项说明。\n\n### 筛选模式与数量控制\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `USE_GLOBAL_MODE` | `boolean` | `true` | `true`=全局优选；`false`=分国家优选 |\n| `GLOBAL_TOP_N` | `int` | `15` | 全局模式保留节点数 |\n| `PER_COUNTRY_TOP_N` | `int` | `1` | 分国家模式每国保留节点数 |\n| `BANDWIDTH_CANDIDATES` | `int` | `90` | 进入测速的候选节点数 |\n| `DNS_UPDATE_TARGET_COUNT` | `int` | `15` | DNS 更新时写入的最大 IP 数量，独立于筛选模式 |\n\n### TCP 连接测试参数\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `TCP_PROBES` | `int` | `3` | 每个节点 TCP 测试次数 |\n| `MIN_SUCCESS_RATE` | `float` | `1.0` | 最低成功率阈值（0.0~1.0） |\n| `TIMEOUT` | `float` | `2.0` | 单次 TCP 连接超时（秒） |\n| `SOCKET_DEFAULT_TIMEOUT` | `int` | `3` | 全局 Socket 默认超时（秒），防止永久阻塞 |\n| `PROGRESS_PRINT_INTERVAL` | `float` | `1` | 进度打印刷新间隔（秒），避免频繁 I\u002FO |\n\n### 前置过滤参数（TCP 测试前生效）\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `PRE_FILTER_PORT_ENABLED` | `boolean` | `true` | 是否启用前置端口过滤 |\n| `PRE_FILTER_PORTS` | `array` | `[443]` | TCP 测试前允许的端口列表（可多个） |\n| `PRE_FILTER_BLOCKED_ENABLED` | `boolean` | `true` | 是否启用前置黑名单过滤 |\n| `PRE_FILTER_BLOCKED_COUNTRIES` | `array` | `[\"CN\"]` | 前置黑名单国家代码列表（TCP 测试前剔除） |\n| `FILTER_COUNTRIES_ENABLED` | `boolean` | `false` | 是否启用前置白名单过滤 |\n| `ALLOWED_COUNTRIES` | `array` | `[\"US\"]` | 前置白名单国家代码列表（仅在开关开启时生效） |\n\n> 💡 过滤执行顺序：**前置端口过滤 → 前置黑名单 → 前置白名单**。  \n> 所有前置过滤均在 TCP 测试前完成，可大幅减少无效测试。\n\n### DNS 黑名单参数（仅作用于 DNS 更新环节）\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `FILTER_BLOCKED_COUNTRIES_ENABLED` | `boolean` | `true` | DNS 更新时是否启用黑名单过滤 |\n| `BLOCKED_COUNTRIES` | `array` | `BD, BI, BY, CD, CF, CN, CU, DE, ET, HK,`\u003Cbr>`IR, KP, LY, MO, NG, NL, PK, RU, SD, SO,`\u003Cbr>`SY, TH, TW, UA, VE, VN, YE, ZW` | DNS 更新时需要剔除的国家代码列表（共 28 个） |\n\n> **说明**：  \n> - 该过滤**仅作用于 Cloudflare DNS 批量更新环节**，不会影响 `ip.txt` 的内容和 GitHub 推送。  \n> - DNS 更新时会**同时应用以下条件**，只有全部满足的节点才会写入 DNS：  \n>   - 端口必须为 `443`  \n>   - 落地不能仅为 IPv6（即保留 IPv4 或双栈节点，需开启 `FILTER_IPV6_AVAILABILITY`）  \n>   - 国家不在 `BLOCKED_COUNTRIES` 黑名单中（需开启 `FILTER_BLOCKED_COUNTRIES_ENABLED`）\n\n### 微信通知（WxPusher）参数\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `ENABLE_WXPUSHER` | `boolean` | `true` | 是否启用微信通知 |\n| `WXPUSHER_APP_TOKEN` | `string` | `\"your_app_token_here\"` | **【必填】** WxPusher 的 APP_TOKEN |\n| `WXPUSHER_UIDS` | `array` | `[\"your_uid_here\"]` | **【必填】** 接收通知的用户 UID 列表 |\n| `WXPUSHER_API_URL` | `string` | `\"http:\u002F\u002Fwxpusher.zjiecode.com\u002Fapi\u002Fsend\u002Fmessage\"` | 消息发送 API 地址 |\n| `NOTIFY_TIMEOUT` | `int` | `3` | 微信通知 API 读取超时（秒） |\n| `NOTIFY_CONNECT_TIMEOUT` | `int` | `3` | 微信通知 API 连接超时（秒） |\n\n> 💡 若不需要通知，将 `ENABLE_WXPUSHER` 设为 `false` 即可。\n\n### Cloudflare DNS 批量更新参数\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `CF_ENABLED` | `boolean` | `true` | 是否启用 DNS 自动更新 |\n| `CF_API_TOKEN` | `string` | `\"your_CF_API_TOKEN\"` | Cloudflare API 令牌（Zone:DNS:Edit 权限） |\n| `CF_ZONE_ID` | `string` | `\"your_CF_ZONE_ID\"` | 域名区域 ID |\n| `CF_DNS_RECORD_NAME` | `string` | `\"your_CF_DNS_RECORD_NAME\"` | 完整子域名 |\n| `CF_TTL` | `int` | `60` | DNS 记录 TTL（秒） |\n| `CF_PROXIED` | `boolean` | `false` | 是否启用 Cloudflare CDN 代理 |\n| `CF_DNS_CONNECT_TIMEOUT` | `int` | `3` | Cloudflare API 连接超时（秒） |\n| `CF_DNS_READ_TIMEOUT` | `int` | `3` | Cloudflare API 读取超时（秒） |\n\n> 💡 若不需要 DNS 更新，将 `CF_ENABLED` 设为 `false` 即可。\n\n### 节点数据源与获取配置\n\n> [!NOTE]\n> 本工具支持**多个数据源同时使用**，并内置了**完全自适应的解析引擎**。无论数据源是标准 `IP:端口#代码` 格式，还是中文标签、emoji国旗、JSON数组\u002F对象，甚至是混合无关文字的标签，程序都能自动识别并统一转换为标准格式。添加新数据源只需在 `ADDITIONAL_SOURCES` 数组中新增一个对象，无需任何代码修改。\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `ADDITIONAL_SOURCES` | `array` | `[]` | 所有数据源列表，每个对象包含 `url`（必填）和 `enabled`（可选，默认true）。程序会自动识别并解析任何常见格式（标准代码\u002F中文\u002Femoji\u002FJSON等） |\n| `FETCH_MAX_RETRIES` | `int` | `3` | 获取节点列表失败时的最大重试次数 |\n| `FETCH_RETRY_DELAY` | `int` | `3` | 获取节点列表重试间隔（秒） |\n| `FETCH_TIMEOUT` | `int` | `3` | 获取节点列表读取超时（秒） |\n| `FETCH_CONNECT_TIMEOUT` | `int` | `3` | 获取节点列表连接超时（秒） |\n| `OUTPUT_FILE` | `string` | `\"ip.txt\"` | 最终结果保存文件名 |\n| `ENABLE_LOGGING` | `boolean` | `false` | 是否启用运行日志（每次运行覆盖 LOG_FILE） |\n| `LOG_FILE` | `string` | `\"cfnb.log\"` | 运行日志文件名（仅在启用日志时生效） |\n\n\u003Cdetails>\n\u003Csummary>🔧 高级参数（可用性 \u002F 带宽 \u002F 并发 \u002F 重试 \u002F 广告）\u003C\u002Fsummary>\n\n**可用性检测参数**\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `TEST_AVAILABILITY` | `boolean` | `true` | 是否进行可用性二次筛选 |\n| `AVAILABILITY_CHECK_API` | `string` | `\"https:\u002F\u002Fapi.090227.xyz\u002Fcheck\"` | 可用性检测 API 地址 |\n| `AVAILABILITY_TIMEOUT` | `int` | `3` | 可用性 API 读取超时（秒） |\n| `AVAILABILITY_CONNECT_TIMEOUT` | `int` | `3` | 可用性 API 连接超时（秒） |\n| `AVAILABILITY_RETRY_MAX` | `int` | `2` | 可用性检测最大重试轮数 |\n| `AVAILABILITY_RETRY_DELAY` | `int` | `3` | 可用性检测重试间隔（秒） |\n| `FILTER_IPV6_AVAILABILITY` | `boolean` | `true` | **仅作用于 DNS**：是否过滤落地仅 IPv6 的节点（`ipv6_only`） |\n\n> 💡 IPv6 过滤逻辑：通过 API 返回的 `inferred_stack` 判断，仅淘汰 `ipv6_only` 节点，保留 `ipv4_only` 和 `dual_stack` 节点。\n\n**带宽测速参数**\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `BANDWIDTH_SIZE_MB` | `float` | `0.5` | 测速下载文件大小（MB） |\n| `BANDWIDTH_TIMEOUT` | `int` | `3` | 单个节点带宽测速超时（秒） |\n| `BANDWIDTH_RETRY_MAX` | `int` | `2` | 带宽测速整体重试轮数 |\n| `BANDWIDTH_RETRY_DELAY` | `int` | `3` | 带宽测速重试间隔（秒） |\n| `BANDWIDTH_URL_TEMPLATE` | `string` | `\"https:\u002F\u002Fspeed.cloudflare.com\u002F__down?bytes={bytes}\"` | 测速 URL 模板 |\n| `BANDWIDTH_PROCESS_BUFFER` | `int` | `2` | curl 进程额外缓冲时间（秒） |\n| `BANDWIDTH_CONNECT_TIMEOUT` | `int` | `3` | curl 测速连接超时（秒） |\n\n**并发控制参数**\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `MAX_WORKERS` | `int` | `200` | TCP 并发测试最大线程数 |\n| `AVAILABILITY_WORKERS` | `int` | `10` | 可用性检测并发数 |\n| `BANDWIDTH_WORKERS` | `int` | `10` | 带宽测速并发数（建议不超过 10） |\n| `FALLBACK_WORKERS` | `int` | `10` | 备用国家查询的并发线程数（当标签无法识别时自动调用可用性API查询国家） |\n\n**重试策略配置**\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `DNS_UPDATE_MAX_RETRIES` | `int` | `3` | DNS 更新最大重试次数 |\n| `DNS_UPDATE_RETRY_DELAY` | `int` | `3` | DNS 更新重试间隔（秒） |\n| `GITHUB_SYNC_MAX_RETRIES` | `int` | `3` | GitHub 推送最大重试次数 |\n| `GITHUB_SYNC_RETRY_DELAY` | `int` | `3` | GitHub 推送重试间隔（秒） |\n| `GIT_SYNC_PROCESS_TIMEOUT` | `int` | `180` | Git 同步子进程最大运行时间（秒） |\n\n#### 广告植入参数\n\n| 参数 | 类型 | 默认值 | 说明 |\n| :--- | :--- | :--- | :--- |\n| `AD_HEADER_ENABLED` | `boolean` | `false` | 是否在 `ip.txt` 头部插入自定义广告行 |\n| `AD_HEADER_LINES` | `array` | `[\"0.0.0.0:443#格式 或纯文本1\", \"0.0.0.0:443#格式 或纯文本2\"]` | 头部广告内容列表（可填任意格式） |\n| `AD_FOOTER_ENABLED` | `boolean` | `false` | 是否在 `ip.txt` 尾部插入自定义广告行 |\n| `AD_FOOTER_LINES` | `array` | `[\"0.0.0.0:443#格式 或纯文本3\", \"0.0.0.0:443#格式 或纯文本4\"]` | 尾部广告内容列表（可填任意格式） |\n| `AD_PERLINE_ENABLED` | `boolean` | `false` | 是否在每行节点末尾追加固定文本 |\n| `AD_PERLINE_TEXT` | `string` | `\" 纯文本\"` | 追加到每行节点末尾的文本 |\n\n> 💡 三个开关完全独立，头部\u002F尾部可为多条，行尾为单条固定文本。  \n> 开启后只会改变 `ip.txt` 内容，不影响 Cloudflare DNS 更新（DNS 仍使用纯净节点列表）。\n\n\u003C\u002Fdetails>\n\n> 💡 **快速配置建议**  \n> - 通常只需修改 `ALLOWED_COUNTRIES`、`WXPUSHER_APP_TOKEN`、`WXPUSHER_UIDS`。  \n> - 启用 DNS 更新需正确填写 `CF_API_TOKEN`、`CF_ZONE_ID`、`CF_DNS_RECORD_NAME`。  \n> - 网络不稳定时可 ↑ `TCP_PROBES` \u002F `TIMEOUT`，↓ `MIN_SUCCESS_RATE` \u002F `MAX_WORKERS`。  \n> - 希望更快出结果可 ↓ `BANDWIDTH_CANDIDATES` 或 `BANDWIDTH_SIZE_MB`。\n\n---\n\n## 📊 结果输出说明\n\n程序运行完成后，会在本地生成 `ip.txt` 文件，每行格式为 `IP地址:端口#国家代码`，例如：\n\n> `104.16.x.x:443#US`  \n> `162.159.x.x:443#HK`\n\n**重要说明**：  \n- `ip.txt` 中保存的是**基于带宽测速排序的结果**，以确保 GitHub 推送的节点列表完整且不丢失任何高速 IP。  \n- Cloudflare DNS 批量更新环节会额外应用 `FILTER_IPV6_AVAILABILITY`（过滤落地 IPv6）、`BLOCKED_COUNTRIES`（屏蔽特定国家）两项过滤，仅将符合条件的 IP 写入 DNS 记录。\n\n---\n\n## ☁️ 配置 Cloudflare DNS 自动更新\n\n本工具支持将优选出的 IP 地址列表自动更新到 Cloudflare DNS 的同名 A 记录，实现解析层面的多 IP 轮询负载均衡。\n\n### 第一步：获取 Cloudflare API Token 与 Zone ID\n\n1. 按照 [获取必要令牌](#-获取必要令牌重要) 中的步骤获取 **Cloudflare API Token**（需具有 Zone:DNS:Edit 权限）。\n2. 在 Cloudflare 域名概览页面右侧复制你的 **Zone ID**。\n\n### 第二步：填写配置文件\n\n编辑 `config.json`，找到 Cloudflare DNS 配置部分，填入你的信息：\n\n```json\n\"CF_ENABLED\": true,\n\"CF_API_TOKEN\": \"your_CF_API_TOKEN\",\n\"CF_ZONE_ID\": \"your_CF_ZONE_ID\",\n\"CF_DNS_RECORD_NAME\": \"your_CF_DNS_RECORD_NAME\",\n\"CF_TTL\": 60,\n\"CF_PROXIED\": false\n```\n\n| 参数 | 说明 |\n|------|------|\n| `CF_ENABLED` | 设为 `true` 启用 DNS 自动更新 |\n| `CF_API_TOKEN` | 上一步获取的 API Token |\n| `CF_ZONE_ID` | 上一步获取的 Zone ID |\n| `CF_DNS_RECORD_NAME` | 要更新的完整子域名 |\n| `CF_TTL` | DNS 记录 TTL（秒），免费套餐最低 120 |\n| `CF_PROXIED` | 是否启用 Cloudflare CDN 代理（橙色云朵），通常设为 `false` |\n\n> 💡 若不需要 DNS 更新功能，将 `CF_ENABLED` 设为 `false` 即可。\n\n### 第三步：测试运行\n\n1. 手动运行一次优选程序：`python main.py`（Windows）或 `python3 main.py`（Linux）。\n2. 程序运行结束后，观察控制台输出。若看到 `✅ Cloudflare DNS 批量更新成功！`，则配置成功。\n\n### 工作原理\n\n每次运行时，脚本会：\n\n1. 查询目标子域名下现有的所有 A 记录。\n2. 从带宽测速结果中按速度顺序挑选落地 IPv4 的节点（若启用 `FILTER_IPV6_AVAILABILITY`）。\n3. 利用 Cloudflare 批量 API **先删除所有旧记录，再创建新记录**，实现原子替换。\n\n### 注意事项\n\n- 免费套餐单次批量操作最多支持 200 条记录，足够使用。\n- 若候选池中落地 IPv4 节点不足目标数量，则更新实际可用的数量，不会强制凑满。\n- 全量替换在极短时间内可能导致解析短暂为空，但对绝大多数场景无影响。\n\n---\n\n## 📤 配置 GitHub 自动同步\n\n本工具支持每次运行后将 `ip.txt` 自动推送到你指定的 GitHub 仓库，方便通过 Raw 链接订阅节点列表。\n\n### 第一步：创建 GitHub 仓库\n\n1. 登录 GitHub，点击右上角 `+` → **New repository**。\n2. **Repository name** 可任意填写（如 `cf-ip`）。\n3. 仓库类型选择 **Private**（推荐）或 Public。\n4. **不要**勾选 “Add a README file”、“.gitignore” 等初始化选项。\n5. 点击 **Create repository**。\n\n### 第二步：初始化本地仓库并关联远程\n\n> 💡 **如果你是通过网页下载的 ZIP 压缩包解压的**，必须执行以下全部命令。  \n> **如果你是用 `git clone` 命令下载的**，本地仓库已自动关联远程，可跳过此步，直接进入第三步。\n\n根据你的操作系统选择对应标签页的命令，**在项目根目录**下打开终端执行：\n\n#### **Windows（PowerShell）**\n\n```powershell\n# 1. 初始化仓库（若尚未初始化）\ngit init\n\n# 2. 移除旧 origin 并添加你的远程地址（替换为你的仓库链接）\n$null = git remote remove origin 2>&1\ngit remote add origin https:\u002F\u002Fgithub.com\u002F你的用户名\u002F仓库名.git\n\n# 3. 拉取远程数据并切换到默认分支（先 main 后 master）\ngit fetch origin\n$null = git checkout main 2>&1\nif ($LASTEXITCODE -ne 0) { $null = git checkout master 2>&1 }\n```\n\n#### **Linux （Bash）**\n\n```bash\n# 1. 初始化仓库（若尚未初始化）\ngit init\n\n# 2. 移除旧 origin 并添加你的远程地址（替换为你的仓库链接）\ngit remote remove origin 2>\u002Fdev\u002Fnull\ngit remote add origin https:\u002F\u002Fgithub.com\u002F你的用户名\u002F仓库名.git\n\n# 3. 拉取远程数据，对齐远程默认分支名\ngit fetch origin\ngit checkout -b temp-branch 2>\u002Fdev\u002Fnull || git checkout main 2>\u002Fdev\u002Fnull || git checkout master 2>\u002Fdev\u002Fnull\ngit branch -M $(git remote show origin | grep \"HEAD branch\" | cut -d \" \" -f5) 2>\u002Fdev\u002Fnull || git branch -M main\n```\n\n> ⚠️ **如果远程仓库是完全空的**（创建时未勾选任何初始化文件，无任何分支），上述命令会因没有可检出的分支而失败。  \n> **解决方法**：先手动创建一个初始提交再重试：\n> ```bash\n> git commit --allow-empty -m \"init\"\n> ```\n> 然后再次执行上面的第 3 步。\n\n### 第三步：获取并填写 GitHub Token\n\n1. 按照 [获取必要令牌](#-获取必要令牌重要) 中的步骤获取 **GitHub Personal Access Token**（需勾选 `repo` 权限，过期时间设为 **No expiration**）。\n2. 编辑对应平台的推送脚本：\n   - **Windows**：用文本编辑器打开 `git_sync.ps1`\n   - **Linux**：用文本编辑器打开 `git_sync.sh`\n3. 将脚本开头部分的四个变量替换为你的真实信息：\n\n   ```powershell\n   # Windows (git_sync.ps1)\n   $github_token = \"your_github_personal_access_token_here\"\n   $github_username = \"your_github_username\"\n   $repo_name = \"your_repo_name\"\n   $branch = \"your_branch\"\n   ```\n\n   ```bash\n   # Linux (git_sync.sh)\n   github_token=\"your_github_personal_access_token_here\"\n   github_username=\"your_github_username\"\n   repo_name=\"your_repo_name\"\n   branch=\"your_branch\"\n   ```\n\n### 第四步：测试推送\n\n1. 确保项目目录下已有 `ip.txt` 文件（可先手动运行一次 `python main.py` 生成）。\n2. 手动执行推送脚本测试：\n   - **Windows**：双击运行 `git_sync.ps1` 或在 PowerShell 中执行 `.\\git_sync.ps1`\n   - **Linux**：执行 `.\u002Fgit_sync.sh`\n3. 若终端显示 `✅ ip.txt 已推送到 GitHub`，则配置成功。\n4. 之后每次运行 `main.py`，程序都会自动调用推送脚本，无需人工干预。\n\n\u003Cdetails>\n\u003Csummary>🚨 推送报错常见原因\u003C\u002Fsummary>\n\n| 报错信息 | 原因 | 解决方法 |\n|----------|------|----------|\n| `remote origin already exists` | 远程仓库已关联过 | 执行 `git remote set-url origin https:\u002F\u002Fgithub.com\u002F你的用户名\u002F仓库名.git` 直接修改地址 |\n| `failed to push some refs` | 远程有本地没有的文件（如 README） | 首次推送使用 `git push -f origin main` 强制覆盖（⚠️ 会删除远程多余文件） |\n| `Permission denied` 或 `403` | Token 无效或权限不足 | 检查 Token 是否勾选 `repo` 权限，且未过期；重新生成 Token 并替换 |\n| `src refspec main does not match any` | 本地分支名不是 `main` | 执行 `git branch` 查看实际分支名，修改推送脚本中的 `$branch` 变量与之相同 |\n\u003C\u002Fdetails>\n\n---\n\n> [!WARNING]\n> **关于私有仓库的特别提醒**\n> \n> 如果你将仓库设置为 **Private（私有）**，则通过 Raw 链接访问 `ip.txt` 时必须在 URL 后附加 `?token=xxxxxx` 参数才能获取内容，例如：\n> ```text\n> https:\u002F\u002Fraw.githubusercontent.com\u002F用户名\u002F仓库名\u002Frefs\u002Fheads\u002F分支名\u002Fip.txt?token=xxxxxx\n> ```\n> 但请注意，**部分代理工具或订阅解析器可能无法正确处理带 Token 参数的 URL**，原因包括：\n> - 不支持自定义请求头（GitHub 要求完整的 User-Agent 等头信息）\n> - 无法解析带查询参数的链接\n> - 防火墙或网络环境限制\n> \n> **因此，如果你希望将 `ip.txt` 作为订阅链接供代理工具使用，强烈建议将仓库设为 Public（公开）。**\n> \n> 公开仓库的 Raw 链接无需 Token 即可访问，兼容性最佳：\n> ```text\n> https:\u002F\u002Fraw.githubusercontent.com\u002F用户名\u002F仓库名\u002Frefs\u002Fheads\u002F分支名\u002Fip.txt\n> ```\n\n### 验证与订阅\n\n推送成功后，访问 `https:\u002F\u002Fraw.githubusercontent.com\u002F你的用户名\u002F仓库名\u002Frefs\u002Fheads\u002F分支名\u002Fip.txt` 即可获取最新节点列表，供代理工具订阅使用。\n\n> 💡 若不需要 GitHub 同步功能，可在 `config.json` 中设置 `GITHUB_SYNC_MAX_RETRIES: 0` 即可关闭。\n\n---\n\n## 🚀 对接 EdgeTunnel (2.0+) 指南\n\n**EdgeTunnel** (EDTunnel) 是基于 Cloudflare Workers 的隧道工具。使用本项目筛选出的 `ip.txt` 可以显著提升连接速度和稳定性。\n\n### 方法一：优选订阅模式（推荐）\n\n1. 复制你的 GitHub Raw 链接：\n   ```text\n   https:\u002F\u002Fraw.githubusercontent.com\u002F你的用户名\u002F仓库名\u002Frefs\u002Fheads\u002F分支名\u002Fip.txt\n   ```\n2. 打开 EdgeTunnel 控制面板，点击菜单栏的 **“优选订阅生成”**。\n3. 在 **“优选订阅模式”** 区域，选择 **“自定义订阅（支持汇聚订阅）”**。\n4. 点击 **“订阅接口”** 按钮，在 **API URL** 输入框中粘贴上一步获取的 GitHub Raw 链接。\n   > 💡 如需指定端口，可在链接后添加 `?port=443`。\n5. （可选）勾选 **“将优选作为 PROXYIP”**。\n6. 点击 **“可用性验证”**，系统将验证 API 并拉取节点列表。\n7. 检查无误后，点击 **“追加API”** 按钮将链接加入自定义订阅地址。\n8. 点击 **“保存”** 按钮完成配置。\n\n### 方法二：手动替换 EdgeTunnel 节点配置\n\n1. 打开 EdgeTunnel 控制面板，点击菜单栏的 **“优选订阅生成”**。\n2. 在 **“优选订阅模式”** 区域，选择 **“自定义订阅（支持汇聚订阅）”**。\n3. 在 **“自定义订阅地址”** 输入框中直接粘贴节点地址，每行一个，例如：\n   ```text\n   104.16.x.x:443#US\n   162.159.x.x:443#HK\n   ```\n4. 点击 **“保存”** 按钮，即可手动指定优选的节点列表。\n\n### 方法三：使用 Cloudflare DNS 域名（推荐）\n\n如果你已启用 Cloudflare DNS 批量更新，可以直接将你的子域名（如 `cf.yourdomain.com`）填入 EdgeTunnel：\n\n**方式一：通过“优选订阅生成”**\n1. 打开 **“优选订阅生成”** 页面，选择 **“自定义订阅（支持汇聚订阅）”**。\n2. 在 **“自定义订阅地址”** 输入框中，填入你的子域名（例如 `cf.yourdomain.com`）。\n3. 点击 **“保存”** 按钮。\n\n**方式二：通过“Cloudflare CDN 访问设置”**\n1. 进入 **“Cloudflare CDN 访问设置”** 页面。\n2. 在 **“PROXYIP”** 输入框中，填入你的子域名（例如 `cf.yourdomain.com`）。\n3. 点击 **“保存”** 按钮。\n\n该域名会自动解析到当前最优的多个 IP 之一，实现零配置动态切换。\n\n### 💡 为什么这样对接更有效？\n- **低延迟**：`main.py` 已经通过 TCP 握手筛选出了延迟最低的节点。\n- **高带宽**：结果经过真实 `curl` 下载测试，排在前面的节点具有更强的并发吞吐能力。\n- **高可用**：通过 `AVAILABILITY_CHECK_API` 过滤了那些能 Ping 通但无法正常通过代理请求的无效 IP。\n- **自动更新**：DNS 记录随优选结果自动刷新，无需手动修改配置。\n\n### 注意事项\n- **GitHub 缓存**：GitHub Raw 链接有一定的 CDN 缓存时间（通常为 5 分钟左右）。如果刚运行完脚本发现链接内容没变，请稍等片刻。\n- **网络环境**：建议在你的主运行环境（如家庭软路由或主力 PC）运行此脚本，因为不同网络环境下筛选出的最优 IP 可能不同。\n- **DNS 生效时间**：修改 DNS 记录后受 TTL 影响，全球生效可能需要几分钟，但通常 Cloudflare 更新是实时的。\n\n---\n\n## ❓ 常见问题\n\n\u003Cdetails>\n\u003Csummary>🌐 代理环境影响\u003C\u002Fsummary>\n\n**会影响，尤其全局\u002FTUN 模式。**\n\n| 测试阶段 | 是否走代理 | 说明 |\n| :--- | :--- | :--- |\n| TCP 延迟测试 (Socket) | ❌ 直连 | 反映本机到节点的 RTT |\n| 带宽测速 (curl) | ❌ 直连 | 反映本机到 CDN 的速度 |\n| API 请求类 (requests) | ✅ 跟随系统代理 | 获取节点、可用性、微信通知等 |\n| Git 推送 (git) | ✅ 跟随系统代理 | 涉及 `github.com` 等 |\n\n> 各阶段对应域名见上方“涉及域名”列表。\n\n**涉及域名：**  \n`cm.edu.kg` · `090227.xyz` · `cloudflare.com` · `zjiecode.com` · `pages.dev` · `github.com` · `githubusercontent.com`\n\n**建议：**  \n1. 检查本机能否直连上述域名 → 能通设 `DIRECT`，不通设 `PROXY`  \n2. **运行程序时关闭全局模式 \u002F TUN 模式**  \n3. 不确定网络情况就直接**退出代理工具再运行**\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🔌 依赖与安装\u003C\u002Fsummary>\n\n1. **提示 `ModuleNotFoundError: No module named 'requests'`**  \n   请执行 `pip install requests` (Windows) 或 `pip3 install requests` (Linux)。\n\n2. **带宽测速被跳过**  \n   请确保系统已安装 `curl` 且位于 PATH 环境变量中。\n\n3. **Linux 下 `git_sync.sh` 权限被拒绝**  \n   执行 `chmod +x git_sync.sh` 赋予执行权限。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>📤 GitHub 推送与同步\u003C\u002Fsummary>\n\n4. **GitHub 推送失败**  \n   - 检查 `git_sync.ps1` \u002F `git_sync.sh` 中的 Token、用户名、仓库名是否正确。\n   - 确保 Token 具备 `repo` 权限。\n   - 确认本地 Git 已正确配置用户信息（`git config --global user.name\u002Femail`）。\n\n5. **GitHub 推送时提示权限错误或 403**  \n   - 请确认令牌具有 `repo` 权限，且未过期。创建令牌时务必勾选 **repo** 全部子项，并将过期时间设为 **No expiration**。\n\n6. **`git pull` 报错 `fatal: refusing to merge unrelated histories`**  \n   - 通常发生在 Fork 或手动修改远程仓库后。运行对应平台的一键修复脚本即可：\n     - Windows：`.\\update_fork.ps1`\n     - Linux：`.\u002Fupdate_fork.sh`\n\n7. **每次推送都弹出浏览器要求登录**  \n   - 运行上述 `update_fork.ps1` 或 `update_fork.sh`，自动将远程地址设为免认证模式。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>☁️ Cloudflare DNS 更新\u003C\u002Fsummary>\n\n8. **Cloudflare DNS 更新失败**  \n   - 检查 `CF_API_TOKEN` 权限、`CF_ZONE_ID`、`CF_DNS_RECORD_NAME` 是否正确。  \n   - 程序内置重试机制，全部失败时会通过微信通知（如已启用）。\n\n9. **为什么我的 DNS 记录数量少于 `DNS_UPDATE_TARGET_COUNT`？**  \n   如果你启用了 `FILTER_IPV6_AVAILABILITY`，且候选池中符合端口、落地类型、国家过滤等条件的节点总数不足你设定的 DNS 更新目标数量，则 DNS 只会更新实际可用的节点数。这是正常现象，你可以通过增加 `BANDWIDTH_CANDIDATES` 来扩大候选池。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🔍 检测与过滤\u003C\u002Fsummary>\n\n10. **可用性检测全部失败**  \n   若 API 接口异常，程序会自动跳过此步骤并回退到 TCP 筛选结果，同时发送微信提醒（如已配置）。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🔒 隐私与其他\u003C\u002Fsummary>\n\n11. **隐私保护**  \n   自动生成的 `.gitignore` 文件会忽略 `config.json`、`git_sync.ps1` 和 `git_sync.sh`，防止敏感信息被提交到公开仓库。\n\n\u003C\u002Fdetails>\n\n---\n\n## 🙏 致谢\n\n- 节点数据源 & 检测 API：[cmliussss](https:\u002F\u002Fgithub.com\u002Fcmliussss)\n- 微信通知服务：[WxPusher](https:\u002F\u002Fwxpusher.zjiecode.com\u002F)\n\n---\n\n**许可证**：本项目采用 [MIT License](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT) 开源。\n\n---\n","这是一个全自动的 Cloudflare CDN 节点优选工具，通过 TCP 延迟筛选、IP 可用性二次检测和真实带宽测速三重机制，从多个公开数据源中聚合并筛选出当前网络环境下速度最快、可用性最高的 Cloudflare IP。项目支持自动更新至 Cloudflare DNS 以及同步至 GitHub 仓库，并提供微信实时通知功能。该工具采用 Python 编写，具备跨平台兼容性（Windows 和 Linux），适用于需要优化网络访问速度和稳定性的场景，如网站加速、代理服务等。","2026-06-11 02:42:03","CREATED_QUERY"]