CubieBoard中文论坛

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

Linux纯Shell实现DNSPod动态域名

[复制链接]
发表于 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"
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-4-15 14:52:43 | 显示全部楼层
另外注意66行,执行的时候会提示,可能多了个大括号,[],删掉就好了。
回复 支持 反对

使用道具 举报

发表于 2013-5-22 16:50:41 | 显示全部楼层
不错!DNSPOD
回复 支持 反对

使用道具 举报

发表于 2013-7-8 13:44:55 | 显示全部楼层
/dns1.sh: Syntax error: Unterminated quoted string

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

使用道具 举报

发表于 2013-7-9 00:12:21 | 显示全部楼层
请问能够像花生壳那样实现端口映射吗?
回复 支持 反对

使用道具 举报

发表于 2013-7-9 10:38:15 | 显示全部楼层
龙腾虎跃 发表于 2013-4-15 14:52
另外注意66行,执行的时候会提示,可能多了个大括号,[],删掉就好了。

DNSPOD本身不就可以动态解析嘛?
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2022-9-30 23:28 , Processed in 0.017985 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部