1.新建脚本文件
1 | vim ddns.sh |
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | #!/bin/sh # 全局变量表 arPass=arMail="" # 获得外网地址 arIpAdress() { local inter="http://members.3322.org/dyndns/getip" wget --quiet --no-check-certificate --output-document=- $inter } # 查询域名地址 # 参数: 待查询域名 arNslookup() { local dnsvr="114.114.114.114" nslookup ${1} $dnsvr | tr -d '\n[:blank:]' | awk -F':' '{print $6}' } # 读取接口数据 # 参数: 接口类型 待提交数据 arApiPost() { local agent="Ddns/3.08" local inter="https://dnsapi.cn/${1:?'Info.Version'}" local param="login_token=${arID},${arToken}&format=json&${2}" wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter } # 更新记录信息 # 参数: 主域名 子域名 arDdnsUpdate() { local domainID recordID recordRS recordCD # 获得域名ID domainID=$(arApiPost "Domain.Info" "domain=${1}") domainID=$(echo $domainID | sed 's/.*"id":"\([0-9]*\)".*/\1/') # 获得记录ID recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}") recordID=$(echo $recordID | sed 's/.\+\[{"id":"\([0-9]\+\)".\+/\1/') # 更新记录IP recordRS=$(arApiPost "Record.Ddns" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_line=默认") recordCD=$(echo $recordRS | sed 's/.\+{"code":"\([0-9]\+\)".\+/\1/') # 输出记录IP if [ "$recordCD" == "1" ]; then echo $recordRS | sed 's/.\+,"value":"\([0-9\.]\+\)".\+/\1/' return 1 fi # 输出错误信息 echo $recordRS | sed 's/.\+,"message":"\([^"]\+\)".\+/\1/' } # 动态检查更新 # 参数: 主域名 子域名 arDdnsCheck() { local postRS local hostIP=$(arIpAdress) local lastIP=$(arNslookup "${2}.${1}") echo "hostIP: ${hostIP}" echo "lastIP: ${lastIP}" if [ "$lastIP" != "$hostIP" ]; then postRS=$(arDdnsUpdate $1 $2) echo "postRS: ${postRS}" if [ $? -ne 1 ]; then return 0 fi fi return 1 } ################################################### # 设置用户参数 arID="89322" arToken="3222w2e3213e123421421424234" #填写账户的API token # 检查更新域名 arDdnsCheck "anrip.com" "lab" ps:以上代码来自http://www.anrip.com/post/872 我们只需要将上面的 # 设置用户参数 arID="user@anrip.com" //DNSPOD的API ID arToken="anrip.net" //DNSPOD的API Token # 检查更新域名 arDdnsCheck"anrip.com" "lab" //需要更新的域名为anrip.com,主机为lab,就是lab.anrip.com arDdnsCheck"anrip.net" "lab" //更新lab.anrip.net |
修改成自己的信息即可
3.增加执行权限
1 | chmod +x /root/ddns.sh |
4.加入任务计划(5分钟执行一次) 注意修改成自己的路径
1 | echo "*/5 * * * * root /root/ddns.sh" >> /etc/crontab |
计划任务执行情况可以查看/var/log/cron
说明:
5 如果在执行后发现
1 2 3 4 5 | [root@localhost ~]# ./ddns.sh ./ddns.sh: line 24: nslookup: command not found hostIP: 114.234.77.222 lastIP: postRS: 114.234.77.222 |
如果你使用的是CentOS则执行
1 | yum -y install bind-utils |
或者是ubuntu的话
1 | sudo apt-get install dnsutils |
6 如果执行后提示
postRS: Domain id invalid
原因:
修改
domainID=$(echo $domainID | sed ‘s/.\+,”id”:”\([0-9]\+\)”.\+/\1/’)
为
domainID=$(echo $domainID | sed ‘s/.*”id”:”\([0-9]*\)”.*/\1/’)
本文上述代码中已经修改,可以正常试用
原文链接:https://xiaohost.com/3154.html,转载请注明出处。
评论0