MT3.0 AliDdns通配符号“*”BUG

mrluo 2019-3-11 3561

看了下阿里巴巴api文档中RR参数进行了urlencode转码,如下图:我的临时解决方案是将用到RR参数的地方替换一下${aliddns_name/\*/%2A}。

最新回复 (2)
  • Kermit 2019-3-12
    引用 3
    改来支持@了
  • Kermit 2019-3-12
    引用 2
    #!/bin/sh /etc/rc.common
    #---------------------------------------------------------------- 
    # Shell Name:ss 
    # Description:Plug-in startup script
    # Author:Starry
    # E-mail: starry@misstar.com
    # Time:2016-11-06 02:30 CST
    # Copyright © 2016 Misstar Tools. All rights reserved.
    #----------------------------------------------------------------*/
    . /etc/misstar/scripts/MTbase
    EXTRA_COMMANDS=" status  version dnsstatus dnsconfig"
    EXTRA_HELP="        status  Get shadowsocks status
            version Get Misstar Tools Version"

    now=`date`


    die () {
        echo $1
        #uci set aliddns_last_act="$now: failed($1)"
    }

    urlencode() {
        # urlencode <string>
        out=""
        while read -n1 c
        do
            case $c in
                [a-zA-Z0-9._-]) out="$out$c" ;;
                *) out="$out`printf '%%%02X' "'$c"`" ;;
            esac
        done
        echo -n $out
    }

    enc() {
        echo -n "$1" | urlencode
    }

    send_request() {
        local args="AccessKeyId=$aliddns_aki&Action=$1&Format=json&$2&Version=2015-01-09"
        local hash=$(echo -n "GET&%2F&$(enc "$args")" | /etc/misstar/applications/aliddns/bin/openssl dgst -sha1 -hmac "$aliddns_aks&" -binary | /etc/misstar/applications/aliddns/bin/openssl base64)
        curl -s "http://alidns.aliyuncs.com/?$args&Signature=$(enc "$hash")"
    }

    get_recordid() {
        grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"'
    }

    query_recordid() {
           if [ "$aliddns_name" == '@' ] 
           then
                   send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$aliddns_domain&Timestamp=$timestamp&Type=A"
           else        
                   send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$aliddns_name.$aliddns_domain&Timestamp=$timestamp&Type=A"
           fi
    }

    update_record() {
           if [ "$aliddns_name" == '@' ] 
           then
                   send_request "UpdateDomainRecord" "RR=%40&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip"
           else        
                   send_request "UpdateDomainRecord" "RR=$aliddns_name&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip"
           fi
    }

    add_record() {
           if [ "$aliddns_name" == '@' ] 
           then
                   send_request "AddDomainRecord&DomainName=$aliddns_domain" "RR=%40&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip"
           else        
                   send_request "AddDomainRecord&DomainName=$aliddns_domain" "RR=$aliddns_name&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip"
           fi
    }

    update(){
           init=1
           while [ '1' ]
           do
                   now=`date "+%Y-%m-%d %H:%M:%S"`
                   if [ "$init" == '2' ];then
                           sleep $aliddns_cycle
                   fi
                   init=2
                   ip=`$aliddns_curl 2>&1` || die "$ip"
                   if [ "$?" -ne "0" ]
                   then
                       uci set misstar.aliddns.aliddns_last_act="$now: get wan ip error"
                       uci commit misstar
                       continue
                   fi

                   current_ip=`nslookup $aliddns_name.$aliddns_domain $aliddns_dns 2>&1`
                   if [ "$aliddns_name" == '@' ] 
                   then
                           current_ip=`nslookup $aliddns_domain $aliddns_dns 2>&1`
                   fi

                   if [ "$?" -eq "0" ]
                   then
                       current_ip=`echo "$current_ip" | grep 'Address 1' | tail -n1 | awk '{print $NF}'`
                   
                       if [ "$ip" = "$current_ip" ]
                       then
                           uci set misstar.aliddns.aliddns_last_act="$now: skipped($ip)"
                           uci commit misstar
                           continue
                       fi 
                   fi
                           
                   timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"`
                           
                                   
                   if [ "$aliddns_record_id" = "" ]
                   then
                       aliddns_record_id=`query_recordid | get_recordid`
                   fi
                   if [ "$aliddns_record_id" = "" ]
                   then
                       aliddns_record_id=`add_record | get_recordid`
                       echo "added record $aliddns_record_id"
                   else
                       update_record $aliddns_record_id
                       echo "updated record $aliddns_record_id"
                   fi
                   
                   # save to file
                   if [ "$aliddns_record_id" = "" ]; then
                       # failed
                           uci set misstar.aliddns.aliddns_last_act="$now: failed"
                           uci commit misstar
                   else
                           uci set misstar.aliddns.aliddns_record_id=$aliddns_record_id
                           uci set misstar.aliddns.aliddns_last_act="$now: success($ip)"
                           uci commit misstar
                   fi
           done
    }

    start(){
           appenable=$(uci get misstar.aliddns.enable)
           if [ "$appenable" = '0' ];then
                   echo "service aliddns is disabeld!"
                   uci set misstar.aliddns.aliddns_last_act="$now: service aliddns is disabeld!"
                uci commit misstar
                   exit
           fi        
           
           aliddns_dns=$(uci get misstar.aliddns.aliddns_dns)
           aliddns_ttl=$(uci get misstar.aliddns.aliddns_ttl)
           aliddns_name=$(uci get misstar.aliddns.aliddns_name)
           aliddns_domain=$(uci get misstar.aliddns.aliddns_domain)
           aliddns_aki=$(uci get misstar.aliddns.aliddns_aki)
           aliddns_aks=$(uci get misstar.aliddns.aliddns_aks)
           aliddns_cycle=$(uci get misstar.aliddns.aliddns_cycle)
           aliddns_curl="curl -s whatismyip.akamai.com"
           
                   
           [ "$aliddns_dns" = "" ] && aliddns_dns="223.5.5.5"
           [ "$aliddns_ttl" = "" ] && aliddns_ttl="600"
           
           update &
    }

    stop(){
           killall aliddns
    }

    status(){
           result=$(ps | grep aliddns | grep misstar | grep -v 'status' | grep -v 'grep' | wc -l)
           if [ "$result" == '3' ];then
                   echo -e '0\c'
           else
                   echo -e '1\c'
           fi
    }
返回
发新帖