阿里云 dns api shell

2018年8月29日 0 条评论 381 次阅读 0 人点赞
由于站点资料丢失,原文链接不记得了
修改了部分地方,只处理二级域名,原来从网卡获取ip改为从第三方站点获取外网ip,由nslookup获取ip改为ping
#!/bin/bash
##配置信息
host="www" #主机名
domain="test.com" #你的域名
ak="kkkk"  #你的阿里云app key
sk="yyyyyy&"  #“你的阿里云app secret&”  注意后面多个“&”

#which nslookup >/dev/null 2>$1 || yum install bind-utils -y
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#前置函数
urlencode1() {
    local length="${#1}"
    i=0
    out=""
    for i in $(awk "BEGIN { for ( i=0; i<$length; i++ ) { print i; } }")
    do
        local c="${1:$i:1}"
        case $c in
            [a-zA-Z0-9.~'&'=_-]) out="$out$c" ;;
            *) out="$out`printf '%%%02X' "'$c"`" ;;
        esac
        i=$(($i + 1))
     done
     echo -n $out
}
urlencode2() {
    local length="${#1}"
    i=0
    out=""
    for i in $(awk "BEGIN { for ( i=0; i<$length; i++ ) { print i; } }")
    do
        local c="${1:$i:1}"
        case $c in
            [a-zA-Z0-9.~_-]) out="$out$c" ;;
            *) out="$out`printf '%%%02X' "'$c"`" ;;
        esac
        i=$(($i + 1))
     done
     echo -n $out
}
send_request() {   
args="AccessKeyId=$ak&Action=$1&Format=json&$2&Version=2015-01-09"
StringToSign1="$(urlencode1 $args)"
StringToSign2="GET&%2F&$(urlencode2 $StringToSign1)"
    hash=$(urlencode2 $(echo -n "$StringToSign2" | openssl dgst -sha1 -hmac $sk -binary | openssl base64))
RESULT=$(curl -k -s "https://alidns.aliyuncs.com/?$args&Signature=$hash")  ## 2> /dev/null)
echo $RESULT
}
query_recordid() {
 if [ "$host" = "@" ]; then 
echo `send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$domain&Timestamp=$timestamp"`
 else
echo `send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$host.$domain&Timestamp=$timestamp"`
 fi
}
update_record() {
    echo `send_request "UpdateDomainRecord" "RR=$host&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=A&Value=$ip"`
}
add_record() {
    echo `send_request "AddDomainRecord&DomainName=$domain" "RR=$host&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&Timestamp=$timestamp&Type=A&Value=$ip"`
}
 
##主程序入口
timestamp=`date -u +"%Y-%m-%dT%H:%M:%SZ"`
ip_network="wan"

#读取本地数据库存储的信息,若有
ipfilename=$(echo $(basename $0))  #获取自身文件名
ipfilename=$(cd "$(dirname "$0")"; pwd)/${ipfilename%.*} 
if [ -f "$ipfilename"_ip ] 
   then
    . "$ipfilename"_ip
   else
   record_id="" ;saved_ip="" ;saved_host="" ;saved_domain=""
fi
echo record_id="$record_id"  saved_ip="$saved_ip"  saved_host="$saved_host"  saved_domain="$saved_domain"
ip=""
RETRY="0"
while [ $RETRY -lt 5 ]; do  #获取本机ipv4地址信息
     #ip=$(ubus call network.interface.$ip_network status | grep \"address\" | grep -oE '[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}')
     ip=$(curl -s http://ipv4.icanhazip.com)
    RETRY=$((RETRY+1))
    if [ -z "$ip" ];then
        sleep 3
    else
        break
    fi
      echo $ip
done

#获取DNS域名服务器对域名解析的ipv4地址
#此处由<a id="a_comment_author_3947953" href="http://home.cnblogs.com/u/1351825/" target="_blank">jethroso</a>指正,在此以表感谢
if [ "$ip" == "$saved_ip" ];then
#if [ "$host" == "@" -o "$host" == "" ];then 
#IPDNS=$(nslookup $domain dns16.hichina.com 2>/dev/null | sed -n 's/Address 1: \([0-f.]*\)/\1/p' | sed -n '2p' | grep -oE '[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}')
#else
#IPDNS=$(nslookup $host.$domain 8.8.8.8 2>/dev/null | sed -n 's/Address 1: \([0-f.]*\)/\1/p' | sed -n '2p' | grep -oE '[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}')
IPDNS=$(/bin/ping ${host}.${domain} -c 1 -w 1 |grep PING | awk -F ')' '{print $1}' |awk -F '(' '{print $2}')
#  fi
fi
 
#检查比对本地数据库存储的ip
#也可以与IPDNS进行比较,替换saved_ip为IPDNS即可
if [ "$ip" = "$saved_ip" -a "$host" = "$saved_host" -a "$domain" = "$saved_domain" ];then
    echo "$(date +"%Y-%m-%d %H:%M:%S")--Host:[$host.$domain] Already updated."
    exit 0
fi
 
#查询解析记录信息
RESULT=`query_recordid`
record_id=$(echo $RESULT | grep -o "RR\":\"$host\",\"Status\":\"[a-zA-Z.]*\",\"Value\":\"[0-9.]*\",\"Weight\":[0-9]*,\"RecordId\":\"[0-9]*\"" | grep -o "\"RecordId\":\"[0-9]*\"" | grep -o "[0-9]*")
if [ "$record_id" = "" ]
    then
    #新增解析记录
    RESULT=`add_record`
    record_id=$(echo $RESULT | grep -o "RecordId\":\"[0-9]*\"" | grep -o "[0-9]*")
    echo "$RESULT"
    if [ "$record_id" != "" ]
        then
        echo "$(date +"%Y-%m-%d %H:%M:%S") -- Added Host [$host.$domain] (IP: $ip)"
        echo "record_id=${record_id};saved_ip=${ip};saved_host=${host};saved_domain=${domain}" > "$ipfilename"_ip
    else
    echo "Not Find Such Host $host.$domain"
    fi
else
    #更新解析记录
    RESULT=`update_record $record_id`
    record_id=$(echo $RESULT | grep -o "RecordId\":\"[0-9]*\"" | grep -o "[0-9]*")
    echo "$RESULT"
    echo "$(date +"%Y-%m-%d %H:%M:%S") -- Update Host [$host.$domain] (IP: $ip)"
    echo "record_id=$record_id ;saved_ip=$ip ;saved_host=$host ;saved_domain=$domain" > "$ipfilename"_ip
fi

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)