个人笔记记录(常用)

个人笔记


阿里云DDNS

<p><a href="https://github.com/honwen/luci-app-aliddns">https://github.com/honwen/luci-app-aliddns</a></p> <pre><code>vim /usr/sbin/aliddns #将IP获取方式由路由修改为如下并屏蔽: ip=`wget -qO- http://ip.cip.cc 2&gt;/dev/null`</code></pre> <h4>linux服务器DDNS</h4> <p><a href="https://bitbucket.org/ilemonrain/aliddns/src/master/">https://bitbucket.org/ilemonrain/aliddns/src/master/</a></p> <pre><code class="language-bash">#!/bin/bash AliDDNS_DomainName="huangwj.xyz" AliDDNS_SubDomainName="hk" AliDDNS_AK="LTAI4FyzibTbw7" AliDDNS_SK="d3sSFwMuj0SG7jlqE1" AliDDNS_LocalIP="curl -s whatismyip.akamai.com" AliDDNS_DomainServerIP="223.5.5.5" AliDDNS_TTL="600" # 防止用户忘记设置参数导致程序报错,部分参数如果检测到空值,自动使用默认值 [ "$AliDDNS_DomainServerIP" = "" ] &amp;&amp; $AliDDNS_DomainServerIP="223.5.5.5" [ "$AliDDNS_TTL" = "" ] &amp;&amp; AliDDNS_TTL="600" # 获取本机公网IP AliDDNS_LocalIP=`$AliDDNS_LocalIP 2&gt;&amp;1` || die "$AliDDNS_LocalIP" # 获取DDNS域名当前解析记录IP AliDDNS_DomainIP=`nslookup $AliDDNS_SubDomainName.$AliDDNS_DomainName $AliDDNS_DomainServerIP 2&gt;&amp;1` # 判断上一条命令的执行是否成功 if [ "$?" -eq "0" ] then # 如果执行成功,分离出结果中的IP地址 AliDDNS_DomainIP=`echo "$AliDDNS_DomainIP" | grep 'Address:' | tail -n1 | awk '{print $NF}'` # 进行判断,如果本次获取的新IP和旧IP相同,结束程序运行 if [ "$AliDDNS_LocalIP" = "$AliDDNS_DomainIP" ] then echo "[$(date "+%G/%m/%d %H:%M:%S")] Local IP ($AliDDNS_LocalIP) is the same with Domain IP ($AliDDNS_DomainIP)" echo "[$(date "+%G/%m/%d %H:%M:%S")] No change modified ..." exit 0 fi fi # 如果IP发生变动,开始进行修改 # 生成时间戳 timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"` # URL加密函数 urlencode() { # urlencode &lt;string&gt; 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 } # URL加密命令 enc() { echo -n "$1" | urlencode } # 发送请求函数 send_request() { local args="AccessKeyId=$AliDDNS_AK&amp;Action=$1&amp;Format=json&amp;$2&amp;Version=2015-01-09" local hash=$(echo -n "GET&amp;%2F&amp;$(enc "$args")" | openssl dgst -sha1 -hmac "$AliDDNS_SK&amp;" -binary | openssl base64) curl -s "http://alidns.aliyuncs.com/?$args&amp;Signature=$(enc "$hash")" } # 获取记录值 (RecordID) get_recordid() { grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"' } # 请求记录值 (RecordID) query_recordid() { send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&amp;SignatureNonce=$timestamp&amp;SignatureVersion=1.0&amp;SubDomain=$AliDDNS_SubDomainName.$AliDDNS_DomainName&amp;Timestamp=$timestamp" } # 更新记录值 (RecordID) update_record() { send_request "UpdateDomainRecord" "RR=$AliDDNS_SubDomainName&amp;RecordId=$1&amp;SignatureMethod=HMAC-SHA1&amp;SignatureNonce=$timestamp&amp;SignatureVersion=1.0&amp;TTL=$AliDDNS_TTL&amp;Timestamp=$timestamp&amp;Type=A&amp;Value=$AliDDNS_LocalIP" } # 添加记录值 (RecordID) add_record() { send_request "AddDomainRecord&amp;DomainName=$AliDDNS_DomainName" "RR=$AliDDNS_SubDomainName&amp;SignatureMethod=HMAC-SHA1&amp;SignatureNonce=$timestamp&amp;SignatureVersion=1.0&amp;TTL=$AliDDNS_TTL&amp;Timestamp=$timestamp&amp;Type=A&amp;Value=$AliDDNS_LocalIP" } # 判断RecordIP是否为空 if [ "$AliDDNS_RecordID" = "" ] then AliDDNS_RecordID=`query_recordid | get_recordid` fi if [ "$AliDDNS_RecordID" = "" ] then AliDDNS_RecordID=`add_record | get_recordid` echo "[$(date "+%G/%m/%d %H:%M:%S")] Added RecordID : $AliDDNS_RecordID" else update_record $AliDDNS_RecordID echo "[$(date "+%G/%m/%d %H:%M:%S")] Updated RecordID : $AliDDNS_RecordID" fi # 输出最终结果 if [ "$AliDDNS_RecordID" = "" ]; then # 输出失败结果 (因为没有获取到RecordID) echo "[$(date "+%G/%m/%d %H:%M:%S")] DDNS Update Failed !" else # 输出成功结果 echo "[$(date "+%G/%m/%d %H:%M:%S")] DDNS Update Success, New IP is : $AliDDNS_LocalIP" fi</code></pre> <h3>CDNS</h3> <pre><code>#!/bin/bash AliDDNS_DomainName="huangwj.xyz" AliDDNS_SubDomainName="test" AliDDNS_LocalIP="www.baidu.com" AliDDNS_AK="LTAI4FyzVCd9W7" AliDDNS_SK="d3sj0SG7jlqE1" AliDDNS_DomainServerIP="223.5.5.5" AliDDNS_TTL="600" timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"` # URL加密函数 urlencode() { # urlencode &lt;string&gt; 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 } # URL加密命令 enc() { echo -n "$1" | urlencode } # 发送请求函数 send_request() { local args="AccessKeyId=$AliDDNS_AK&amp;Action=$1&amp;Format=json&amp;$2&amp;Version=2015-01-09" local hash=$(echo -n "GET&amp;%2F&amp;$(enc "$args")" | openssl dgst -sha1 -hmac "$AliDDNS_SK&amp;" -binary | openssl base64) curl -s "http://alidns.aliyuncs.com/?$args&amp;Signature=$(enc "$hash")" } # 获取记录值 (RecordID) get_recordid() { grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"' } # 请求记录值 (RecordID) query_recordid() { send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&amp;SignatureNonce=$timestamp&amp;SignatureVersion=1.0&amp;SubDomain=$AliDDNS_SubDomainName.$AliDDNS_DomainName&amp;Timestamp=$timestamp" } # 更新记录值 (RecordID) update_record() { send_request "UpdateDomainRecord" "RR=$AliDDNS_SubDomainName&amp;RecordId=$1&amp;SignatureMethod=HMAC-SHA1&amp;SignatureNonce=$timestamp&amp;SignatureVersion=1.0&amp;TTL=$AliDDNS_TTL&amp;Timestamp=$timestamp&amp;Type=CNAME&amp;Value=$AliDDNS_LocalIP" } # 添加记录值 (RecordID) add_record() { send_request "AddDomainRecord&amp;DomainName=$AliDDNS_DomainName" "RR=$AliDDNS_SubDomainName&amp;SignatureMethod=HMAC-SHA1&amp;SignatureNonce=$timestamp&amp;SignatureVersion=1.0&amp;TTL=$AliDDNS_TTL&amp;Timestamp=$timestamp&amp;Type=CNAME&amp;Value=$AliDDNS_LocalIP" } # 判断RecordIP是否为空 if [ "$AliDDNS_RecordID" = "" ] then AliDDNS_RecordID=`query_recordid | get_recordid` fi if [ "$AliDDNS_RecordID" = "" ] then AliDDNS_RecordID=`add_record | get_recordid` echo "[$(date "+%G/%m/%d %H:%M:%S")] Added RecordID : $AliDDNS_RecordID" else update_record $AliDDNS_RecordID echo "[$(date "+%G/%m/%d %H:%M:%S")] Updated RecordID : $AliDDNS_RecordID" fi # 输出最终结果 if [ "$AliDDNS_RecordID" = "" ]; then # 输出失败结果 (因为没有获取到RecordID) echo "[$(date "+%G/%m/%d %H:%M:%S")] DDNS Update Failed !" else # 输出成功结果 echo "[$(date "+%G/%m/%d %H:%M:%S")] DDNS Update Success, New IP is : $AliDDNS_LocalIP" fi</code></pre>

页面列表

ITEM_HTML