dnspod动态更新域名解析

Posted on Posted in linux
Tips: 本文创建于2015年6月22日,已超过 2 年,内容或图片可能已经失效!

前些日子入手一部树莓,架了个ftp和简单的网页访问,挂在家里,由于是拨号上网,所以利用dnspod动态更新域名解析。

只适合简单更新。

dnspod api地址?https://www.dnspod.cn/docs/index.html

利用shell的jq解析json文件,把jq文件放在脚本的同级目录。

利用ip.qq.com获取真实IP(各种网络运营商有待研究)

因为dnspod 的限制,所以每一刻钟执行一次(crontab)。

执行示例(两个参数,第一个参数为域名,第二个参数为二级域名的名字):

./change_ip.sh ?domain.com ?test

以下为shell脚本文件(昨天睡多了,一晚上没睡觉,丫好累)。

  1. #!/bin/bash  
  2. cur_dir=$(cd `dirname $0`; pwd)  
  3. login_email='username'  
  4. login_password='password'  
  5.   
  6. cd $cur_dir  
  7.   
  8. # check variable  
  9. if [ $# -eq "2" ]; then  
  10.     echo ""  
  11.     echo "start backup ..."  
  12. else  
  13.     echo "You can run the script like this: eg.sh /test"  
  14.     exit 1  
  15. fi  
  16.   
  17. curl -sX POST https://dnsapi.cn/Domain.Info  -d "login_email=$login_email&login_password=$login_password&format=json&domain=$1" > domainInfo  
  18. domainStatus=`jq '.' domainInfo | grep \"code\" | awk -F '"' '{print $4}'`  
  19. cat domainInfo | grep $1  
  20. if [ $? -ne 0 ];then  
  21.     echo "未能获取域名$1的信息"  
  22.     exit 0  
  23. fi  
  24. if [ $domainStatus -ne 1 ];then  
  25.     echo '未能获取域名信息'  
  26.     exit 0  
  27. fi  
  28. domainId=`jq '.domain .id' domainInfo | awk -F '"' '{print $2}'` 
  29. curl -sX POST https://dnsapi.cn/Record.List -d "login_email=$login_email&login_password=$login_password&format=json&domain_id=$domainId" > domainRecord 
  30. recordStatus=`jq '.status' domainRecord | grep \"code\" | awk -F '"' '{print $4}'`  
  31. if [ $recordStatus -ne 1 ];then  
  32.     echo '未能获取域名记录信息'  
  33.     exit 0  
  34. fi  
  35.   
  36. jq '.records' domainRecord | grep id > id  
  37. jq '.records' domainRecord | grep name > name  
  38. jq '.records' domainRecord | grep value > value  
  39.   
  40. cat name | grep $2  
  41. if [ $? -ne 0 ];then  
  42.     echo "找不到二级域名$2"  
  43.     exit 0  
  44. fi  
  45.   
  46. recordId=`paste -d " " id name value | grep $2 | awk -F '"' '{print $4}'` 
  47. recordIP=`paste -d " " id name value | grep $2 | awk -F '"' '{print $12}'`  
  48.   
  49. realIP=`curl -s ip.qq.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | tail -n 1 | awk -F '<' '{print $3}' | awk -F '>' '{print $2}'`  
  50.   
  51. if [ $recordIP == $realIP ];then  
  52.     exit 0  
  53. fi  
  54. curl -X POST https://dnsapi.cn/Record.Ddns -d "login_email=$login_email&login_password=$login_password&format=json&domain_id=$domainId&record_id=$recordIP&record_line=默认&sub_domain=$2&value=$realIP"  
» 转载请注明来源:若我若鱼 » dnspod动态更新域名解析

Leave a Reply

Your email address will not be published. Required fields are marked *

eight − 4 =