hostIp=$(ip -6 neighbor show | grep 95:8F:15:B3:6B:68 |grep -v fe80| awk '{print $1}' | head -1)
echo$hostIp }
# Dnspod Bridge # Args: type data
arDdnsApi() {
local agent="AnripDdns/6.1.0(wang@rehiy.com)"
local apiurl="https://dnsapi.cn/${1:?'Info.Version'}" local params="login_token=$arToken&format=json&$2"
iftype wget >/dev/null 2>&1; then wget -q -O- --no-check-certificate -U $agent --post-data $params$apiurl else curl -s -A $agent -d $params$apiurl fi
}
# Fetch Ids of Domain and Record # Args: recordType domain subdomain
arDdnsIds() {
local errMsg
local domainId local recordId
# Get Domain Id domainId=$(arDdnsApi "Domain.Info""domain=$2") domainId=$(echo$domainId | sed 's/.*"id":"\([0-9]*\)".*/\1/')
if ! [ "$domainId" -gt 0 ] 2>/dev/null ;then errMsg=$(echo$domainId | sed 's/.*"message":"\([^\"]*\)".*/\1/') echo"arDdnsIds - $errMsg" return 1 fi
# Get Record Id recordId=$(arDdnsApi "Record.List""domain_id=$domainId&sub_domain=$3&record_type=$1") recordId=$(echo$recordId | sed 's/.*"id":"\([0-9]*\)".*/\1/')
if ! [ "$recordId" -gt 0 ] 2>/dev/null ;then errMsg=$(echo$recordId | sed 's/.*"message":"\([^\"]*\)".*/\1/') echo"arDdnsIds - $errMsg" return 1 fi
echo$domainId$recordId }
# Fetch Record Ip # Args: domainId recordId
arDdnsRecordIp() {
local errMsg
local recordIp
# Get Record Ip recordIp=$(arDdnsApi "Record.Info""domain_id=$1&record_id=$2") recordIp=$(echo$recordIp | sed 's/.*,"value":"\([0-9a-fA-F\.\:]*\)".*/\1/')
# Output Record Ip case"$recordIp"in [0-9a-fA-F]*) echo$recordIp return 0 ;; *) errMsg=$(echo$recordIp | sed 's/.*"message":"\([^\"]*\)".*/\1/') echo"arDdnsRecordIp - $errMsg" return 1 ;; esac
}
# Update Record Ip # Args: domainId recordId subdomain hostIp recordType
arDdnsUpdate() {
local errMsg
local recordRs local recordIp local recordCd
if [ -z "$5" ]; then echo"arDdnsUpdate - Args number error" return 1 fi
# Update Ip recordRs=$(arDdnsApi "Record.Modify""domain_id=$1&record_id=$2&sub_domain=$3&record_type=$5&value=$4&record_line=%e9%bb%98%e8%ae%a4") recordIp=$(echo$recordRs | sed 's/.*,"value":"\([0-9a-fA-F\.\:]*\)".*/\1/') recordCd=$(echo$recordRs | sed 's/.*{"code":"\([0-9]*\)".*/\1/')
# Output Result if [ "$recordIp" = "$4" ] && [ "$recordCd" = "1" ]; then echo"arDdnsUpdate - success" killall -HUP dnsmasq echo"DNS cache flush successfully" return 0 else errMsg=$(echo$recordRs | sed 's/.*,"message":"\([^"]*\)".*/\1/') echo"arDdnsUpdate - $errMsg" return 1 fi
}
# DDNS Check # Args: Main Sub arDdnsCheck() {
local errCode
local recordType local hostIp
local ddnsIds local lastIp local postRs
echo"Fetching Host Ip" if [ "$3" = "6" ]; then recordType=AAAA hostIp=$(arWanIp6) else recordType=A hostIp=$(arWanIp4) fi
errCode=$? echo"> Host Ip: $hostIp" echo"> Record Type: $recordType" if [ $errCode -ne 0 ]; then return 1 fi
echo"Fetching Ids of $2.$1" ddnsIds=$(arDdnsIds "$recordType""$1""$2")
errCode=$? echo"> Domain Ids: $ddnsIds" if [ $errCode -ne 0 ]; then return 1 fi
echo"Checking Record for $2.$1" lastIp=$(arDdnsRecordIp $ddnsIds)
errCode=$? echo"> Last Ip: $lastIp" if [ $errCode -ne 0 ]; then return 1 fi
if [ "$lastIp" = "$hostIp" ]; then echo"> Last Ip is the same as host Ip" return 0 fi
echo"Updating Record for $2.$1" postRs=$(arDdnsUpdate $ddnsIds"$2""$hostIp""$recordType")
errCode=$? echo"> $postRs" if [ $errCode -ne 0 ]; then return 1 fi }
arToken="ID,Token"
# IPv6: arDdnsCheck "365day.top""pan" 6
问题
如果是在 Windows 环境下编辑好好再传到服务器的,可能会遇到文件格式的问题,类似如下的报错
bin/sh^M: 坏的解释器: 没有那个文件或目录
出现原因:Windows 下每一行结尾是 \n\r ,而 linux 是 \n ,因此 linux 读不了