CubieBoard博客-HomeCubieTech公司网站

cubie.cc CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 6414|回复: 5

Linux纯Shell实现DNSPod动态域名

[复制链接]

1

主题

0

好友

76

积分

注册会员

Rank: 2

贡献
13
金钱
33
威望
13
买家信用
卖家信用
积分
76
发表于 2013-4-15 14:51:39 |显示全部楼层
刚刚在cubie上使用了dnspod弄了个动态域名解析的,看到了很多个,感觉这个不错。正在实用,分享给大家。
  1. #!/bin/sh

  2. #################################################
  3. # AnripDdns v3.4.1
  4. # 基于DNSPod用户API实现的动态域名客户端
  5. # 作者: 若海[mail@anrip.com]
  6. # 介绍: http://www.anrip.com/ddnspod
  7. # 时间: 2013-04-01 21:25:00
  8. #################################################

  9. # 全局变量表
  10. arPass=""
  11. arMail=""

  12. # 获得外网地址
  13. arIpAdress() {
  14.     local inter="http://members.3322.org/dyndns/getip"
  15.     wget --quiet --no-check-certificate --output-document=- $inter
  16. }

  17. # 查询域名地址
  18. # 参数: 待查询域名
  19. arNslookup() {
  20.     local dnsvr="183.60.52.217" #ns1.dnspod.net
  21.     nslookup $1 $dnsvr | tr -d '\n[:blank:]' | sed 's/.\+:\([0-9\.]\+\)/\1/'
  22. }

  23. # 读取接口数据
  24. # 参数: 接口类型 待提交数据
  25. arApiPost() {
  26.     local agent="AnripDdns/0.3(mail@anrip.com)"
  27.     local inter="https://dnsapi.cn/${1:?'Info.Version'}"
  28.     local param="login_email=${arMail}&login_password=${arPass}&format=json&${2}"
  29.     wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter
  30. }

  31. # 更新记录信息
  32. # 参数: 主域名 子域名
  33. arDdnsUpdate() {
  34.     local domainID recordID recordRS recordCD
  35.     # 获得域名ID
  36.     domainID=$(arApiPost "Domain.Info" "domain=${1}")
  37.     domainID=$(echo $domainID | sed 's/.\+{"id":"\([0-9]\+\)".\+/\1/')
  38.     # 获得记录ID
  39.     recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}")
  40.     recordID=$(echo $recordID | sed 's/.\+\[{"id":"\([0-9]\+\)".\+/\1/')
  41.     # 更新记录IP
  42.     recordRS=$(arApiPost "Record.Ddns" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_line=默认")
  43.     recordCD=$(echo $recordRS | sed 's/.\+{"code":"\([0-9]\+\)".\+/\1/')
  44.     # 输出记录IP
  45.     if [[ "$recordCD" == "1" ]]; then
  46.         echo $recordRS | sed 's/.\+,"value":"\([0-9\.]\+\)".\+/\1/'
  47.         return 1
  48.     fi
  49.     # 输出错误信息
  50.     echo $recordRS | sed 's/.\+,"message":"\([^"]\+\)".\+/\1/'
  51. }

  52. # 动态检查更新
  53. # 参数: 主域名 子域名
  54. arDdnsCheck() {
  55.     local postRS
  56.     local hostIP=$(arIpAdress)
  57.     local lastIP=$(arNslookup "${2}.${1}")
  58.     echo "hostIP: ${hostIP}\nlastIP: ${lastIP}"
  59.     if [[ "$lastIP" != "$hostIP" ]]; then
  60.         postRS=$(arDdnsUpdate $1 $2)
  61.         echo "postRS: ${postRS}"
  62.         if [[ $? -ne 1 ]]; then
  63.             return 0
  64.         fi
  65.     fi
  66.     return 1
  67. }

  68. ###################################################

  69. # 设置用户参数
  70. arMail="user@anrip.com"
  71. arPass="anrip.net"

  72. # 检查更新域名
  73. arDdnsCheck "anrip.com" "lab"
  74. arDdnsCheck "anrip.net" "lab"
复制代码
回复

使用道具 举报

1

主题

0

好友

76

积分

注册会员

Rank: 2

贡献
13
金钱
33
威望
13
买家信用
卖家信用
积分
76
发表于 2013-4-15 14:52:43 |显示全部楼层
另外注意66行,执行的时候会提示,可能多了个大括号,[],删掉就好了。
回复

使用道具 举报

5

主题

0

好友

1219

积分

金牌会员

Rank: 6Rank: 6

贡献
237
金钱
481
威望
237
买家信用
卖家信用
积分
1219
发表于 2013-5-22 16:50:41 |显示全部楼层
不错!DNSPOD
回复

使用道具 举报

3

主题

0

好友

865

积分

高级会员

Rank: 4

贡献
171
金钱
317
威望
171
买家信用
卖家信用
积分
865
发表于 2013-7-8 13:44:55 |显示全部楼层
/dns1.sh: Syntax error: Unterminated quoted string

我运行的时候出现这个错误时咋回事啊?
回复

使用道具 举报

0

主题

0

好友

121

积分

注册会员

Rank: 2

贡献
28
金钱
36
威望
28
买家信用
卖家信用
积分
121
发表于 2013-7-9 00:12:21 |显示全部楼层
请问能够像花生壳那样实现端口映射吗?
回复

使用道具 举报

11

主题

0

好友

864

积分

高级会员

Rank: 4

贡献
168
金钱
308
威望
168
买家信用
卖家信用
积分
864
发表于 2013-7-9 10:38:15 |显示全部楼层
龙腾虎跃 发表于 2013-4-15 14:52
另外注意66行,执行的时候会提示,可能多了个大括号,[],删掉就好了。

DNSPOD本身不就可以动态解析嘛?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|邮件群发|cubie.cc---深刻的嵌入式技术和应用讨论中文社区 ( 粤ICP备13051116号-1  

GMT+8, 2019-12-11 20:25 , Processed in 0.021237 second(s), 14 queries , Apc On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc. | Style by Coxxs

回顶部