- 论坛徽章:
- 0
|
本帖最后由 freefall12 于 2013-09-10 09:19 编辑
这个脚本干什么用的?主要用来解析顶级域名到动态IP的,同时也可以对域名记录进行批量操作,比如一次性创建或删除多个域名记录。脚本不受限于shell版本,支持bash,也支持busybox中的ash.其它的没有测试。有兴趣的可以试下。- #!/bin/sh
- #written by benson huang
- #admin@zhetenger.com
- curl_status=`which curl 2>/dev/null`
- [ -n "$curl_status" ] || { echo "curl is not installed";exit 3; }
- #dnspod帐号名
- email='admin@zhetenger.com'
- #dnspod密码
- password='xxxxxxx'
- sub_domains='www ftp @'
- API_url="https://dnsapi.cn"
- pub_ip_addr=$(curl -s http://checkip.dyndns.com | sed -n 's/.*: \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p')
- format='json'
- lang='en'
- record_type='A'
- offset="2"
- length=""
- os=$(uname -a | egrep -io 'openwrt' | tr [A-Z] [a-z])
- shared_data="login_email=$email&login_password=$password&format=$format&lang=$lang&"
- PROGRAM=$(basename $0)
- #check for changed ip every 300 seconds
- wait=300
- getJsonValue(){
- params="$1"
- echo $json_data | sed 's/\\\\\//\//g' | sed 's/[{}]//g;s/\(\[\|\]\)//g' |\
- awk -F ',' '{ for (i=1;i<=NF;i++) { print $i }}' |\
- sed 's/":/\|/g;s/"//g' |\
- awk -v k="$params" -F'|' '{ if ($(NF - 1) == k ) print $NF }'
- }
- getDomainId() {
- local json_data=`curl -k -A 'xddns' $API_url/Domain.info -d ${shared_data}domain=$domainname`
- getJsonValue id
- }
-
- getRecordId() {
- for sub_domain in $sub_domains;do
- local json_data
- json_data=$(curl -k -A 'xddns' $API_url/Record.List -d "${shared_data}record_type=$record_type&domain_id=$domain_id&sub_domain=${sub_domain}&offset=${offset}&length=${length}")
-
- #check if record type is NS
- IS_NS=$(getJsonValue type | grep -o 'NS' | head -n1)
-
- #if there are 3 @ subdomains, get the non-NS record id only
- if [ "$IS_NS" = "NS" ];then
-
- numofline=$(getJsonValue id | sed '/^[0-9]\{7\}$/d' | wc -l)
-
- [ $numofline -eq 3 ] && tmp_result_id="$(getJsonValue id | sed '/^[0-9]\{7\}$/d' | head -n1 )" || continue
- else
- tmp_result_id="$(getJsonValue id | sed '/^[0-9]\{7\}$/d')"
- fi
- #if result_id is not empty or unset, append a space to split record id
- result_id="${result_id:+${result_id} }${tmp_result_id}"
-
- done
-
- echo $result_id
- exit
- }
- createDomain() {
- curl -k -A 'xddns' $API_url/Domain.Create -d ${shared_data}domain=$domainname
- exit
- }
- createRecord() {
- for sub_domain in $sub_domains;do
- local extra_data="&domain_id=$domain_id&sub_domain=$sub_domain&record_type=$record_type&record_line=默认&value=${pub_ip_addr}"
- curl -k -A 'xddns' $API_url/Record.Create -d $shared_data"$extra_data"
- done
- }
- updateRecord() {
- local record_id_list=`getRecordId`
- tmp_sub_domains=${sub_domains}
- for record_id in $record_id_list;do
- sub_domain=$(echo $tmp_sub_domains | awk '{ print $1 }')
- tmp_sub_domains=${tmp_sub_domains#* }
- local extra_data="&domain_id=$domain_id&sub_domain=${sub_domain}\
- &record_type=${record_type}&record_line=默认&value=${pub_ip_addr}&record_id=$record_id"
- curl -k -A 'xddns' $API_url/Record.Modify -d $shared_data"$extra_data"
- done
- }
-
- removeRecord(){
- read -p "list the subdomains to be deleted " subdomain
- sub_domains="$subdomain"
-
- for sub_domain in $sub_domains;do
- record_id=`getRecordId`
-
- local extra_data="&domain_id=$domain_id&record_id=$record_id"
- curl -k -A 'xddns' $API_url/Record.Remove -d $shared_data"$extra_data"
- done
- exit
-
- }
- checkip() {
- oldip=$pub_ip_addr
- newip=$(curl -s http://checkip.dyndns.com | sed -n 's/.*: \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p')
- if [ "$newip" != "$oldip" ];then
- oldip="$newip"
- return 8
- else
- return 3
- fi
- }
- if [ $# -ne 2 ];then
- echo "usage:$PROGRAM |-c create record|-r remove records|-C create new domain|-m modify record | -bc create a batch of records DOMAIN [eg.example.com]"
- exit 3
- fi
- [ -n "$2" ] && domainname=$2
- domain_id=`getDomainId $domainname`
- case $1 in
- -c)createRecord $domainname;;
- -r)removeRecord $domainname;;
- -u)updateRecord $domainname;;
- -C)createDomain $domainname;;
- -i)getRecordId $domainname;;
- *) echo "no such option";
- exit 3;;
- esac
- while [ 1 ];do
- checkip
-
- if [ $? -eq 8 ];then
- pub_ip_addr="$newip"
- updateRecord
- fi
-
- sleep $wait
- done
复制代码 使用方法可以参考这里 |
|