背景
有些加速软件,需要频繁更换IP,自动化更新IP的思路是通过填入固定域名,再通过DNS的 API更新域名的IP来实现,更换IP的需求。
1、获得新IP
通过IP列表和 CDN 厂商提供的大文件下载测速功能,获取当前最快的IP。
./CloudflareST -url https://speed.cloudflare.com/__down?bytes=200000000
执行完后,会生成result.csv文件。获取第一个IP
ipAddr=$(sed -n "$((x + 2)),1p" result.csv | awk -F, '{print $1}')
再把这个ipAddr写入专用加速 二级域名里。这样就可以让使用该域名的软件自动保持使用最新最快IP了。
2、用chatgpt写更新DNS的脚本
#!/bin/bash
# 预置变量
tokenid="xxxxxx"
tokenkey="xxxxxxxxxxxxxxxx"
sub_domain="xxx" #专用的二级域名
./CloudflareST -url https://speed.cloudflare.com/__down?bytes=200000000
#curl https://dnsapi.cn/Domain.List -d "login_token=${tokenid},${tokenkey}&format=json" #返回域名列表,给下面domin_id赋值
domain_id="xxxxxxx"
# 获取已有的 DNS 记录中指定子域名的 IP 地址
response=$(curl -s -X POST https://dnsapi.cn/Record.List -d "login_token=${tokenid},${tokenkey}&format=json&domain_id=${domain_id}&sub_domain=${sub_domain}&record_type=A&offset=0&length=3")
currentIP=$(echo "$response" | jq -r '.records[0].value')
record_id=$(echo "$response" | jq -r '.records[0].id')
# 待更新的新 IP 地址
ipAddr=$(sed -n "$((x + 2)),1p" result.csv | awk -F, '{print $1}')
echo "当前 IP 地址:$currentIP"
echo "待更新 IP 地址:$ipAddr"
pushmessage="this is test msg"
# 比较 IP 地址是否相同,若不同则执行更新操作
if [ "$currentIP" != "$ipAddr" ]; then
echo "IP 地址不同,开始执行更新操作"
pushmessage="IP 地址已更新为:$ipAddr"
# 在此处添加你的更新操作(包含判断成功与否的代码)
curl -X POST https://dnsapi.cn/Record.Modify -d "login_token=${tokenid},${tokenkey}&format=json&domain_id=${domain_id}&record_id=${record_id}&sub_domain=${sub_domain}&value=$ipAddr&record_type=A&record_line_id=0"
else
echo "IP 地址相同,无需更新"
pushmessage="IP 无需更新:$ipAddr"
fi
#如果不需要tg推送,下面全不要
telegramBotUserId="@userinfid" #用户ID通过@userinfoid获取
telegramBotToken="bottoken" #通过botfather获取
echo $pushmessage
message_text=$pushmessage
#解析模式,可选HTML或Markdown
MODE='HTML'
#api接口
URL="https://api.telegram.org/bot${telegramBotToken}/sendMessage"
if [[ -z ${telegramBotToken} ]]; then
echo "未配置TG推送"
else
#res=$(timeout 20s curl -s -X POST $URL -d chat_id=${telegramBotUserId} -d parse_mode=${MODE} -d text="${message_text}")
res=$(wget -q --timeout=20 -O - --post-data="chat_id=${telegramBotUserId}&parse_mode=${MODE}&text=${message_text}" "$URL")
if [ $? == 124 ];then
echo 'TG_api请求超时,请检查网络是否重启完成并是否能够访问TG'
exit 1
fi
resSuccess=$(echo "$res" | jq -r ".ok")
if [[ $resSuccess = "true" ]]; then
echo "TG推送成功";
else
echo "TG推送失败,请检查TG机器人token和ID";
fi
fi
验证执行效果:
后面,再添加到crond做定时任务,比如要在白天的指定时间点(9点、12点、15点、18点、21点)执行脚本,可以使用 crontab -e 命令编辑 cron 作业表,然后添加以下内容:
0 9,12,15,18,21 * * * /path/to/your/script.sh
注意,使用cron执行时,上面的脚本需要使用绝对路径,或者 cd 到执行目录。