diff --git a/script/README.md b/script/README.md new file mode 100644 index 0000000..b9adf95 --- /dev/null +++ b/script/README.md @@ -0,0 +1,109 @@ +# XIU2/CloudflareSpeedTest - Script + +这里都是一些基于 **XIU2/CloudflareSpeedTest** 并**扩展更多功能**的脚本。 +有什么现有脚本功能上的建议可以告诉我,如果你有一些自用好用的脚本也可以通过 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues) 或 Pull requests 发给我添加到这里让更多人用到(会标注作者的~ + +> 小提示:点击↖左上角的三横杠图标按钮即可查看目录~ + +**** +## 📑 cfst_hosts.sh / cfst_hosts.bat (已内置) + +运行 CloudflareST 获得最快 IP 后,脚本会替换 Hosts 文件中的旧 CDN IP。 + +> **使用说明:https://github.com/XIU2/CloudflareSpeedTest/issues/42** + +
+「 更新日志」 + +**** + +#### 2021年12月17日,版本 v1.0.6 + - **1. 优化** [找不到满足条件的 IP 就一直循环测速] 功能,在指定下载测速下限时没有重新测速的问题(默认注释) + +#### 2021年12月17日,版本 v1.0.3 + - **1. 新增** 找不到满足条件的 IP 就一直循环测速功能(默认注释) + - **2. 优化** 代码 + +#### 2021年09月29日,版本 v1.0.2 + - **1. 修复** 当测速结果 IP 数量为 0 时,脚本没有退出的问题 + +#### 2021年04月29日,版本 v1.0.1 + - **1. 优化** 不再需要加上 -p 0 参数来避免回车键退出了(现在可以即显示结果,又不用担心回车键退出程序) + +#### 2021年01月28日,版本 v1.0.0 + - **1. 发布** 第一个版本 + +
+ +**** + +## 📑 cfst_3proxy.bat (已内置) + +该脚本的作用为 CloudflareST 测速后获取最快 IP 并替换 3Proxy 配置文件中的 Cloudflare CDN IP。 +可以把所有 Cloudflare CDN IP 都重定向至最快 IP,实现一劳永逸的加速所有使用 Cloudflare CDN 的网站(不需要一个个添加域名到 Hosts 了)。 + +> **使用说明:https://github.com/XIU2/CloudflareSpeedTest/discussions/71** + +
+「 更新日志」 + +**** + +#### 2021年12月17日,版本 v1.0.5 + - **1. 优化** [找不到满足条件的 IP 就一直循环测速] 功能,在指定下载测速下限时没有重新测速的问题(默认注释) + +#### 2021年12月17日,版本 v1.0.4 + - **1. 新增** 找不到满足条件的 IP 就一直循环测速功能(默认注释) + - **2. 优化** 代码 + +#### 2021年09月29日,版本 v1.0.3 + - **1. 修复** 当测速结果 IP 数量为 0 时,脚本没有退出的问题 + +#### 2021年04月29日,版本 v1.0.2 + - **1. 优化** 不再需要加上 -p 0 参数来避免回车键退出了(现在可以即显示结果,又不用担心回车键退出程序) + +#### 2021年03月16日,版本 v1.0.1 + - **1. 优化** 代码及注释内容 + +#### 2021年03月13日,版本 v1.0.0 + - **1. 发布** 第一个版本 + +
+ +**** + +## 📑 cfst_ddns.sh / cfst_ddns.bat + +如果你的域名托管在 Cloudflare,则可以通过 Cloudflare 官方提供的 API 来自动更新域名解析记录! + +> **使用说明:https://github.com/XIU2/CloudflareSpeedTest/issues/40** + +
+「 更新日志」 + +**** + +#### 2021年12月17日,版本 v1.0.4 + - **1. 新增** 找不到满足条件的 IP 就一直循环测速功能(默认注释) + - **2. 优化** 代码 + +#### 2021年09月29日,版本 v1.0.3 + - **1. 修复** 当测速结果 IP 数量为 0 时,脚本没有退出的问题 + +#### 2021年04月29日,版本 v1.0.2 + - **1. 优化** 不再需要加上 -p 0 参数来避免回车键退出了(现在可以即显示结果,又不用担心回车键退出程序) + +#### 2021年01月27日,版本 v1.0.1 + - **1. 优化** 配置从文件中读取 + +#### 2021年01月26日,版本 v1.0.0 + - **1. 发布** 第一个版本 + +
+ +**** + +## 功能建议/问题反馈 + +如果你遇到什么问题,可以先去 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues) 里看看是否有别人问过了(记得去看下 [**Closed**](https://github.com/XIU2/CloudflareSpeedTest/issues?q=is%3Aissue+is%3Aclosed) 的)。 +如果没找到类似问题,请新开个 [**Issues**](https://github.com/XIU2/CloudflareSpeedTest/issues/new) 来告诉我! \ No newline at end of file diff --git a/script/cfst_3proxy.bat b/script/cfst_3proxy.bat new file mode 100644 index 0000000..87469eb --- /dev/null +++ b/script/cfst_3proxy.bat @@ -0,0 +1,136 @@ +:: -------------------------------------------------------------- +:: Ŀ: CloudflareSpeedTest Զ 3Proxy +:: 汾: 1.0.5 +:: : XIU2 +:: Ŀ: https://github.com/XIU2/CloudflareSpeedTest +:: -------------------------------------------------------------- +@echo off +Setlocal Enabledelayedexpansion + +::жǷѻùԱȨ + +>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" + +if '%errorlevel%' NEQ '0' ( + goto UACPrompt +) else ( goto gotAdmin ) + +::д vbs űԹԱбűbat + +:UACPrompt + echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" + echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" + "%temp%\getadmin.vbs" + exit /B + +::ʱ vbs űڣɾ + +:gotAdmin + if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) + pushd "%CD%" + CD /D "%~dp0" + + +::жǷԻùԱȨޣûоȥȡDZűҪ + + +:: nowip_3proxy.txt ļڣ˵ǵһиýű +if not exist "nowip_3proxy.txt" ( + echo ýűΪ CloudflareST ٺȡ IP 滻 3Proxy ļе Cloudflare CDN IP + echo ԰ Cloudflare CDN IP ض IPʵһݵļʹ Cloudflare CDN վҪһ Hosts ˣ + echo ʹǰĶhttps://github.com/XIU2/CloudflareSpeedTest/discussions/71 + echo. + set /p nowip="뵱ǰ 3Proxy ʹõ Cloudflare CDN IP سҪò裩:" + echo !nowip!>nowip_3proxy.txt + echo. +) + +:: nowip_3proxy.txt ļȡǰʹõ Cloudflare CDN IP +set /p nowip=nowip_3proxy.txt +echo. +echo IP Ϊ %nowip% +echo IP Ϊ %bestip% + + + +:: 뽫ڵ D:\Program Files\3Proxy Ϊ 3Proxy Ŀ¼ +CD /d "D:\Program Files\3Proxy" +:: ȷиýűǰѾԹ 3Proxy вʹã + + + +echo. +echo ʼ 3proxy.cfg ļ3proxy.cfg_backup... +copy 3proxy.cfg 3proxy.cfg_backup +echo. +echo ʼ滻... +( + for /f "tokens=*" %%i in (3proxy.cfg_backup) do ( + set s=%%i + set s=!s:%nowip%=%bestip%! + echo !s! + ) +)>3proxy.cfg + +net stop 3proxy +net start 3proxy + +echo ... +echo. +:STOP +pause \ No newline at end of file diff --git a/script/cfst_ddns.bat b/script/cfst_ddns.bat new file mode 100644 index 0000000..ba3affc --- /dev/null +++ b/script/cfst_ddns.bat @@ -0,0 +1,38 @@ +:: -------------------------------------------------------------- +:: 项目: CloudflareSpeedTest 自动更新域名解析记录 +:: 版本: 1.0.4 +:: 作者: XIU2 +:: 项目: https://github.com/XIU2/CloudflareSpeedTest +:: -------------------------------------------------------------- +@echo off +Setlocal Enabledelayedexpansion + +:: 这里可以自己添加、修改 CloudflareST 的运行参数,echo.| 的作用是自动回车退出程序(不再需要加上 -p 0 参数了) +echo.|CloudflareST.exe -o "result_ddns.txt" + +:: 判断结果文件是否存在,如果不存在说明结果为 0 +if not exist result_ddns.txt ( + echo. + echo CloudflareST 测速结果 IP 数量为 0,跳过下面步骤... + goto :END +) + +for /f "tokens=1 delims=," %%i in (result_ddns.txt) do ( + Set /a n+=1 + If !n!==2 ( + Echo %%i + if "%%i"=="" ( + echo. + echo CloudflareST 测速结果 IP 数量为 0,跳过下面步骤... + goto :END + ) + curl -X PUT "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/域名解析记录ID" ^ + -H "X-Auth-Email: 账号邮箱" ^ + -H "X-Auth-Key: 前面获取的 API 令牌" ^ + -H "Content-Type: application/json" ^ + --data "{\"type\":\"A\",\"name\":\"完整域名\",\"content\":\"%%i\",\"ttl\":1,\"proxied\":true}" + goto :END + ) +) +:END +pause \ No newline at end of file diff --git a/script/cfst_ddns.sh b/script/cfst_ddns.sh new file mode 100644 index 0000000..b4f927c --- /dev/null +++ b/script/cfst_ddns.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH +# -------------------------------------------------------------- +# 项目: CloudflareSpeedTest 自动更新域名解析记录 +# 版本: 1.0.4 +# 作者: XIU2 +# 项目: https://github.com/XIU2/CloudflareSpeedTest +# -------------------------------------------------------------- + +_READ() { + [[ ! -e "cfst_ddns.conf" ]] && echo -e "[错误] 配置文件不存在 [cfst_ddns.conf] !" && exit 1 + CONFIG=$(cat "cfst_ddns.conf") + FOLDER=$(echo "${CONFIG}"|grep 'FOLDER='|awk -F '=' '{print $NF}') + [[ -z "${FOLDER}" ]] && echo -e "[错误] 缺少配置项 [FOLDER] !" && exit 1 + ZONE_ID=$(echo "${CONFIG}"|grep 'ZONE_ID='|awk -F '=' '{print $NF}') + [[ -z "${ZONE_ID}" ]] && echo -e "[错误] 缺少配置项 [ZONE_ID] !" && exit 1 + DNS_RECORDS_ID=$(echo "${CONFIG}"|grep 'DNS_RECORDS_ID='|awk -F '=' '{print $NF}') + [[ -z "${DNS_RECORDS_ID}" ]] && echo -e "[错误] 缺少配置项 [DNS_RECORDS_ID] !" && exit 1 + EMAIL=$(echo "${CONFIG}"|grep 'EMAIL='|awk -F '=' '{print $NF}') + [[ -z "${EMAIL}" ]] && echo -e "[错误] 缺少配置项 [EMAIL] !" && exit 1 + KEY=$(echo "${CONFIG}"|grep 'KEY='|awk -F '=' '{print $NF}') + [[ -z "${KEY}" ]] && echo -e "[错误] 缺少配置项 [KEY] !" && exit 1 + TYPE=$(echo "${CONFIG}"|grep 'TYPE='|awk -F '=' '{print $NF}') + [[ -z "${TYPE}" ]] && echo -e "[错误] 缺少配置项 [TYPE] !" && exit 1 + NAME=$(echo "${CONFIG}"|grep 'NAME='|awk -F '=' '{print $NF}') + [[ -z "${NAME}" ]] && echo -e "[错误] 缺少配置项 [NAME] !" && exit 1 + TTL=$(echo "${CONFIG}"|grep 'TTL='|awk -F '=' '{print $NF}') + [[ -z "${TTL}" ]] && echo -e "[错误] 缺少配置项 [TTL] !" && exit 1 + PROXIED=$(echo "${CONFIG}"|grep 'PROXIED='|awk -F '=' '{print $NF}') + [[ -z "${PROXIED}" ]] && echo -e "[错误] 缺少配置项 [PROXIED] !" && exit 1 +} + +_UPDATE() { + # 这里可以自己添加、修改 CloudflareST 的运行参数 + ./CloudflareST -o "result_ddns.txt" + + # 判断结果文件是否存在,如果不存在说明结果为 0 + [[ ! -e "result_ddns.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0 + + CONTENT=$(sed -n "2,1p" result_ddns.txt | awk -F, '{print $1}') + if [[ -z "${CONTENT}" ]]; then + echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." + exit 0 + fi + curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_RECORDS_ID}" \ + -H "X-Auth-Email: ${EMAIL}" \ + -H "X-Auth-Key: ${KEY}" \ + -H "Content-Type: application/json" \ + --data "{\"type\":\"${TYPE}\",\"name\":\"${NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}" +} + +_READ +cd "${FOLDER}" +_UPDATE \ No newline at end of file diff --git a/script/cfst_hosts.bat b/script/cfst_hosts.bat new file mode 100644 index 0000000..838a9df --- /dev/null +++ b/script/cfst_hosts.bat @@ -0,0 +1,126 @@ +:: -------------------------------------------------------------- +:: Ŀ: CloudflareSpeedTest Զ Hosts +:: 汾: 1.0.4 +:: : XIU2 +:: Ŀ: https://github.com/XIU2/CloudflareSpeedTest +:: -------------------------------------------------------------- +@echo off +Setlocal Enabledelayedexpansion + +::жǷѻùԱȨ + +>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" + +if '%errorlevel%' NEQ '0' ( + goto UACPrompt +) else ( goto gotAdmin ) + +::д vbs űԹԱбűbat + +:UACPrompt + echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" + echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" + "%temp%\getadmin.vbs" + exit /B + +::ʱ vbs űڣɾ + +:gotAdmin + if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) + pushd "%CD%" + CD /D "%~dp0" + + +::жǷԻùԱȨޣûоȥȡDZűҪ + + +:: nowip_hosts.txt ļڣ˵ǵһиýű +if not exist "nowip_hosts.txt" ( + echo ýűΪ CloudflareST ٺȡ IP 滻 Hosts е Cloudflare CDN IP + echo ʹǰĶhttps://github.com/XIU2/CloudflareSpeedTest/issues/42#issuecomment-768273768 + echo. + echo һʹãȽ Hosts Cloudflare CDN IP ͳһΪһ IP + set /p nowip=" Cloudflare CDN IP سҪò裩:" + echo !nowip!>nowip_hosts.txt + echo. +) + +:: nowip_hosts.txt ļȡǰ Hosts ʹõ Cloudflare CDN IP +set /p nowip=nowip_hosts.txt +echo. +echo IP Ϊ %nowip% +echo IP Ϊ %bestip% + +CD /d "C:\Windows\System32\drivers\etc" +echo. +echo ʼ Hosts ļhosts_backup... +copy hosts hosts_backup +echo. +echo ʼ滻... +( + for /f "tokens=*" %%i in (hosts_backup) do ( + set s=%%i + set s=!s:%nowip%=%bestip%! + echo !s! + ) +)>hosts + +echo ... +echo. +:STOP +pause \ No newline at end of file diff --git a/script/cfst_hosts.sh b/script/cfst_hosts.sh new file mode 100644 index 0000000..117ce01 --- /dev/null +++ b/script/cfst_hosts.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH +# -------------------------------------------------------------- +# 项目: CloudflareSpeedTest 自动更新 Hosts +# 版本: 1.0.4 +# 作者: XIU2 +# 项目: https://github.com/XIU2/CloudflareSpeedTest +# -------------------------------------------------------------- + +_CHECK() { + while true + do + if [[ ! -e "nowip_hosts.txt" ]]; then + echo -e "该脚本的作用为 CloudflareST 测速后获取最快 IP 并替换 Hosts 中的 Cloudflare CDN IP。\n使用前请先阅读:https://github.com/XIU2/CloudflareSpeedTest/issues/42#issuecomment-768273848" + echo -e "第一次使用,请先将 Hosts 中所有 Cloudflare CDN IP 统一改为一个 IP。" + read -e -p "输入该 Cloudflare CDN IP 并回车(后续不再需要该步骤):" NOWIP + if [[ ! -z "${NOWIP}" ]]; then + echo ${NOWIP} > nowip_hosts.txt + break + else + echo "该 IP 不能是空!" + fi + else + break + fi + done +} + +_UPDATE() { + echo -e "开始测速..." + NOWIP=$(head -1 nowip_hosts.txt) + + # 这里可以自己添加、修改 CloudflareST 的运行参数 + ./CloudflareST -o "result_hosts.txt" + + # 如果需要 "找不到满足条件的 IP 就一直循环测速下去",那么可以将下面的两个 exit 0 改为 _UPDATE 即可 + [[ ! -e "result_hosts.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0 + + # 下面这行代码是 "找不到满足条件的 IP 就一直循环测速下去" 才需要的代码 + # 考虑到当指定了下载速度下限,但一个满足全部条件的 IP 都没找到时,CloudflareST 就会输出所有 IP 结果 + # 因此当你指定 -sl 参数时,需要移除下面这段代码开头的 # 井号注释符,来做文件行数判断(比如下载测速数量:10 个,那么下面的值就设在为 11) + #[[ $(cat result_hosts.txt|wc -l) > 11 ]] && echo "CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速..." && _UPDATE + + + BESTIP=$(sed -n "2,1p" result_hosts.txt | awk -F, '{print $1}') + if [[ -z "${BESTIP}" ]]; then + echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." + exit 0 + fi + echo ${BESTIP} > nowip_hosts.txt + echo -e "\n旧 IP 为 ${NOWIP}\n新 IP 为 ${BESTIP}\n" + + echo "开始备份 Hosts 文件(hosts_backup)..." + \cp -f /etc/hosts /etc/hosts_backup + + echo -e "开始替换..." + sed -i 's/'${NOWIP}'/'${BESTIP}'/g' /etc/hosts + echo -e "完成..." +} + +_CHECK +_UPDATE \ No newline at end of file diff --git a/script/cfst_hosts_mac.sh b/script/cfst_hosts_mac.sh new file mode 100644 index 0000000..c51c246 --- /dev/null +++ b/script/cfst_hosts_mac.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH +# -------------------------------------------------------------- +# 项目: CloudflareSpeedTest 自动更新 Hosts +# 版本: 1.0.4 +# 作者: XIU2 +# 项目: https://github.com/XIU2/CloudflareSpeedTest +# -------------------------------------------------------------- + +_CHECK() { + while true + do + if [[ ! -e "nowip_hosts.txt" ]]; then + echo -e "该脚本的作用为 CloudflareST 测速后获取最快 IP 并替换 Hosts 中的 Cloudflare CDN IP。\n使用前请先阅读:https://github.com/XIU2/CloudflareSpeedTest/issues/42#issuecomment-768273848" + echo -e "第一次使用,请先将 Hosts 中所有 Cloudflare CDN IP 统一改为一个 IP。" + read -e -p "输入该 Cloudflare CDN IP 并回车(后续不再需要该步骤):" NOWIP + if [[ ! -z "${NOWIP}" ]]; then + echo ${NOWIP} > nowip_hosts.txt + break + else + echo "该 IP 不能是空!" + fi + else + break + fi + done +} + +_UPDATE() { + echo -e "开始测速..." + NOWIP=$(head -1 nowip_hosts.txt) + + # 这里可以自己添加、修改 CloudflareST 的运行参数 + ./CloudflareST -o "result_hosts.txt" + + # 如果需要 "找不到满足条件的 IP 就一直循环测速下去",那么可以将下面的两个 exit 0 改为 _UPDATE 即可 + [[ ! -e "result_hosts.txt" ]] && echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0 + + # 下面这行代码是 "找不到满足条件的 IP 就一直循环测速下去" 才需要的代码 + # 考虑到当指定了下载速度下限,但一个满足全部条件的 IP 都没找到时,CloudflareST 就会输出所有 IP 结果 + # 因此当你指定 -sl 参数时,需要移除下面这段代码开头的 # 井号注释符,来做文件行数判断(比如下载测速数量:10 个,那么下面的值就设在为 11) + #[[ $(cat result_hosts.txt|wc -l) > 11 ]] && echo "CloudflareST 测速结果没有找到一个完全满足条件的 IP,重新测速..." && _UPDATE + + + BESTIP=$(sed -n "2,1p" result_hosts.txt | awk -F, '{print $1}') + if [[ -z "${BESTIP}" ]]; then + echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..." + exit 0 + fi + echo ${BESTIP} > nowip_hosts.txt + echo -e "\n旧 IP 为 ${NOWIP}\n新 IP 为 ${BESTIP}\n" + + echo "开始备份 Hosts 文件(hosts_backup)..." + \cp -f /etc/hosts /etc/hosts_backup + + echo -e "开始替换..." + sed -i '' 's/'${NOWIP}'/'${BESTIP}'/g' /etc/hosts + echo -e "完成..." +} + +_CHECK +_UPDATE \ No newline at end of file