使用 DNSPOD 的域名解析实现 DDNS 域名动态的脚本

本贴最后更新于 3096 天前,其中的信息可能已经时移世易

原文:http://www.dwhd.org/20150519_160959.html

在CC15上安装成功

1更换openwrt的源加速地址

1
sed -i 's/downloads.openwrt.org/openwrt.legion.pt/' /etc/opkg.conf

2安装bash shell

1
opkg update && opkg install bash

3将root用户的shell换成bash

1
sed -ri 's|^(root:.*:)/bin/.*|\1/bin/bash|' /etc/passwd

4下载DDNS脚本

1
wget http://www.dwhd.org/script/dnspodDDNS.sh -O /etc/dnspodddns.sh && chmod +x /etc/dnspodddns.sh

5执行下面的命令 修改几个必要的参数

1
2
vi /etc/dnspodddns.sh
[ -z "$(grep 'dnspodddns.sh' /var/spool/cron/crontabs/root )" ] && echo "*/1 * * * * /etc/dnspodddns.sh &>/dev/null" >> /var/spool/cron/crontabs/root

6然后退出ssh 重新登录或者重启下路由

1
reboot

 

 

下面是脚本源码

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash
#########################################################################
# File Name: dnspodDDNS.sh
# Author: LookBack
# Email: 393411264@qq.com
# Created Time: 2015年03月28日 星期六 23时19分00秒
#########################################################################
#
#        利用DNSPOD官方提供的API,自动更新域名解析记录,
#        在Netgear 4300 openwrt和CentOS 6系统上测试完美执行,
#        在其他硬件的openwrt上应该也是可以执行的,
#        非openwrt系统的不保证脚本的兼容性。
#        如有任何BUG 请联系我 393411264@qq.com
#
#########################################################################
 
#=======================下方是需要修改的参数信息=============================================
#DNSPOD 帐号
DNSPODID="393411264@qq.com"
#DNSPOD 密码
DNSPODPW="www.05hd.com"
#DNSPOD 主域名
DNSPODPD="05h.com"
#DNSPOD 二级域名,可以是多个,如下设置DNSPODSDNM[0-n]。有几个就写几个,把多余的删除
DNSPODSDNM[0]="openwrt141"
DNSPODSDNM[1]="openwrt"
DNSPODSDNM[2]="netgear111"
#=========================下方内容如果不懂请勿修改============================================
CURL=$(which curl)
GetID() {
        $CURL -X POST https://dnsapi.cn/Domain.List -ks -d "login_email=$1&login_password=$2&format=json" | \
awk -F',' '{for(i=1;i<=NF;i++) if($i~/"id":[0-9]+/ || $i~/"name":".*"/) {print $i}}' | \
awk '{if (NR%2==0){print $0} else {printf"%s ",$0}}' | sed 's/"domains":\[//' | \
awk -F':| |"' '{print $9,$4}' > /tmp/dnspodDomain
        while read line; do
                if [ "$(awk '{print$1}' <<< $line)A" = "${DNSPODPD}A" ]; then
                        DNSPODPDID=$(awk '{print$2}' <<< $line)
                        break
                fi
        done < /tmp/dnspodDomain
 
        $CURL -X POST https://dnsapi.cn/Record.List -ks -d "login_email=$1&login_password=$2&format=json&domain_id=$DNSPODPDID" | \
sed 's/.*},"records":\[//' | awk -F',' '{for(i=1;i<=NF;i++) if($i~/"id":"[0-9]+"/ || $i~/"name":".*"/) {print $i}}' | \
awk '{if (NR%2==0){print $0} else {printf"%s ",$0}}' | awk -F'"' '{print $8,$4}' > /tmp/dnspodRecord
        while read line; do
                for i in `seq 1 ${#DNSPODSDNM[@]}`; do
                        i=$[$i-1]
                        [ "$(awk '{print$1}' <<< $line)A" = "${DNSPODSDNM[$i]}A" ] && DNSPODSDID[$i]=$(awk '{print$2}' <<< $line) && break
                done
        done < /tmp/dnspodRecord
}
 
StartRun() {
        WanIP=$($CURL -s ip.cn | grep -Eo '([0-9]{1,3}[\.]){3}[0-9]{1,3}')
        DNSPODIP=$($CURL -X POST https://dnsapi.cn/Record.Info -ks -d \
"login_email=$1&login_password=$2&format=json&domain_id=$3&record_id=${DNSPODSDID[0]}" | \
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')
#awk -F':|,|"' '{for(i=1;i<=NF;i++)if($i~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/){print$i;break}}')
        [ -z $WanIP ] && exit 1
        [ -z $DNSPODIP ] && exit 1
        :> /tmp/dnspodDomain && :>/tmp/dnspodRecord
}
 
UploadIP() {
        [ "${3}A" != "${4}A" ]
        if [ "A$?" = "A0" ]; then
                for i in `seq 1 ${#DNSPODSDNM[@]}`; do
                        i=$[$i-1]
                        $CURL -X POST https://dnsapi.cn/Record.Modify -ks -d \
"login_email=$1&login_password=$2&format=json&domain_id=$5\
&record_id= ${DNSPODSDID[$i]}&sub_domain=${DNSPODSDNM[$i]}&value=$3\
&record_type=A&record_line=默认" &>/dev/null
                        echo "$(date "+%F %H:%M:%S") Domain ${DNSPODSDNM[$i]}.$DNSPODPD A Record Update To $3" >> /var/log/dnspod.log
                done
        fi
}
 
RUN() {
        GetID $1 $2
        StartRun $1 $2 $DNSPODPDID
        UploadIP $1 $2 ${WanIP} ${DNSPODIP} $DNSPODPDID ${DNSPODSDID[*]}
}
 
RUN $DNSPODID $DNSPODPW $DNSPODPDID
 
 
 
  • OpenWrt
    15 引用 • 22 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 519 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 4 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 50 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 593 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 8 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 913 回帖 • 249 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    136 引用 • 193 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 656 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 1 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    157 引用 • 3798 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 36 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 5 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 10 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖 • 2 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 780 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 632 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖 • 1 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    8 引用 • 30 回帖 • 410 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 638 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 3 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 5 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1436 引用 • 10056 回帖 • 490 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 439 关注