不多说直接看代码,如果移除注释应该是很简单的代码,当然部分地方还是被我复杂化了,估计日志记录还是需要的,之前使用Pythone版的日志记录怪怪的,有几次没成功更新都没记录成功。
使用这个还是有点前提的,比如要事先知道域名ID和记录ID。和修改部分配置。不过这都没设置为变量的形式,感觉代码足够简单就没有这个必要了。
首先查看https://www.dnspod.cn/docs/records.html#dns 这个API,一些必要的东西还是要了解的。
#!/bin/bash
#########################################
# author : loveyu #
# url : https://loveyu.org #
#########################################
function post()
{
#提交域名更新请求
if [ "" = "$1" ]
then
log "call error"
return 0
fi
#通过CURL 操作,如果手动指定IP添加 value=$1
###########################################
#
# 替换中括号中的内容,包含中括号
# [you email] 你的登录邮箱
# [you password] 你的密码
# [you domain_id] .....
# [you record_id ..... 详见 https://www.dnspod.cn/docs/records.html#dns
# [you sub_doamian] ....
#############################################
result=`curl -s POST https://dnsapi.cn/Record.Ddns -d 'login_email=[you email]&login_password=[you password]&format=json&domain_id=[you domain_id]&record_id=[you record_id]&record_line=默认&sub_domain=[you sub_doamian]'`
log $1
log $result
}
function log()
{
#输出一个记录值
echo -n `date +'[%Y-%m-%d %H:%M:%S]'`
echo " $1"
}
function get_ip(){
#获取外网IP地址
#花生壳的服务
curl -s http://members.3322.org/dyndns/getip
}
function d_lookup() {
if [ "" = "$1" ]
then
log "call error"
echo "nslookup error"
exit
fi
#域名解析地址查询
#如果不支持nslookup 请自己安装dns查询工具
nslookup $1 | sed -n -e '4,$p' | awk '/Address/{print $2}'
}
ip=$(get_ip) #获取外网IP
#############################################################
#
# 请将 [you domain] 替换为你的域名 如 loveyu.org ,无括号
#
#############################################################
new_ip=$(d_lookup [you domain]) #查询当前域名IP
#如果需要初始化时提交一次,可以直接使用 post $ip,然后把下面的注释掉
if [ "$ip" != "$new_ip" ]
then
post $ip #初始DNS查询不相等时提交数据
fi
while :
do
sleep 30
new_ip=$(get_ip)
if [ "$ip" != "$new_ip" ]
then
#30秒的轮询数据查询
post $new_ip
ip=$new_ip
fi
done
#########################################
# author : loveyu #
# url : https://loveyu.org #
#########################################
function post()
{
#提交域名更新请求
if [ "" = "$1" ]
then
log "call error"
return 0
fi
#通过CURL 操作,如果手动指定IP添加 value=$1
###########################################
#
# 替换中括号中的内容,包含中括号
# [you email] 你的登录邮箱
# [you password] 你的密码
# [you domain_id] .....
# [you record_id ..... 详见 https://www.dnspod.cn/docs/records.html#dns
# [you sub_doamian] ....
#############################################
result=`curl -s POST https://dnsapi.cn/Record.Ddns -d 'login_email=[you email]&login_password=[you password]&format=json&domain_id=[you domain_id]&record_id=[you record_id]&record_line=默认&sub_domain=[you sub_doamian]'`
log $1
log $result
}
function log()
{
#输出一个记录值
echo -n `date +'[%Y-%m-%d %H:%M:%S]'`
echo " $1"
}
function get_ip(){
#获取外网IP地址
#花生壳的服务
curl -s http://members.3322.org/dyndns/getip
}
function d_lookup() {
if [ "" = "$1" ]
then
log "call error"
echo "nslookup error"
exit
fi
#域名解析地址查询
#如果不支持nslookup 请自己安装dns查询工具
nslookup $1 | sed -n -e '4,$p' | awk '/Address/{print $2}'
}
ip=$(get_ip) #获取外网IP
#############################################################
#
# 请将 [you domain] 替换为你的域名 如 loveyu.org ,无括号
#
#############################################################
new_ip=$(d_lookup [you domain]) #查询当前域名IP
#如果需要初始化时提交一次,可以直接使用 post $ip,然后把下面的注释掉
if [ "$ip" != "$new_ip" ]
then
post $ip #初始DNS查询不相等时提交数据
fi
while :
do
sleep 30
new_ip=$(get_ip)
if [ "$ip" != "$new_ip" ]
then
#30秒的轮询数据查询
post $new_ip
ip=$new_ip
fi
done
详细情况可以查看Gist:https://gist.github.com/loveyu/2715a7469927b49a50f3
每次看到shell都会默默地鄙视一番windows的cmd,写一个if都各种纠结。
cmd还是可以很强大的,就是语法太坑,不适合现代人类
随便用batsh.org写点什么,就感觉cmd简直不是人看的
dnspod有自己的检测手段吧。
确实有自己的检测手段,但重复提交会导致IP封掉无法使用API
熟悉的python~
这里面没pythone代码吧
牛叉,技术帝啊。
没沙发了
这又不是论坛!!!
辛勤的博主,支持一下!
我来回访了
欢迎
感觉好糊涂的说。