dnspod.cn提供的免费服务支持把国际顶级域名(如abc.com/net/cc)绑定到自己家宽带的动态IP上面,从此告别花生壳,3322.org。这个工具每隔一段时间在网关设备上运行一次,一旦发现宽带ip地址发生变化,就会向服务器发出更新请求。

请注意:

  • 此客户端代码可运行在家庭内网的任意设备上

  • 此客户端需要linux运行环境

  • 此客户端需要python语言解释器执行(一般来说,各种linux发行版均默认自带python解释器)

  • 使用此程序,需要掌握以下技能:shell基本操作, linux文本编辑器(vi/nano)基本操作

安装方法:

  1. 复制以下源代码并保存为dnspod.py

#!/user/bin/env python
#coding=utf-8import urllib, urllib2, json
import socket, struct, fcntl
import sys, os, timeurl = "https://dnsapi.cn/Record.Ddns"# 使用你自己的设置更改以下内容account = "account@email.com"  # 你在dnspod.cn注册的邮件地址
password = "password"          # 你在dnspod.cn注册密码
domain_id = "12345678"         # 你的域名id (如何获取请查看本文最下方)
sub_domain = "hostname"        # 你要更新的主机头名,例如 hostname.mydomain.com
record_id = "12345678"         # 此主机头名对应的记录id (如何获取请查看本文最下方)
record_line = "默认"           # dnspod.cn中为此记录指定的线路
wan_ifname = "ppp0"            # 连接 Internet 的网卡设备名(对于拨号上网的路由器来说,一般为ppp0,内网的其他机器使用链接局域网的网卡名称即可如eth0)# 使用你自己的设置更改以上内容prev_file = "/dev/shm/wan.prev"
log_file = "/var/log/dnspod.log"def get_ipaddress(interface):s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)ip = socket.inet_ntoa(fcntl.ioctl(s.fileno(),0x8915,struct.pack("256s", interface[:15]))[20:24])if ip.find("192.") == 0:url = "http://1111.ip138.com/ic.asp"response = urllib.urlopen(url)reply = response.read()import re reg = re.compile(r"\d+.\d+.\d+.\d+")ip = reg.findall(reply)[0]return ipdef print_log(text):log = open(log_file, "a")timestamp = time.strftime('%Y-%m-%d %H:%M:%S')log.write(timestamp + " | " + text + "\n")log.close()values = {"login_email": account,"login_password": password,"domain_id": domain_id,"sub_domain": sub_domain,"record_id": record_id,"record_line": record_line,"format": "json"
}changed = False
current_ip = get_ipaddress(wan_ifname)
prev_ip = ""if not os.path.exists(prev_file):prev = open(prev_file, "a")prev.write(current_ip)prev.close()changed = True
else:prev = open(prev_file, "r")prev_ip = prev.readline().strip()prev.close()if prev_ip != current_ip: prev = open(prev_file, "w")prev.write(current_ip)prev.close()changed = Trueif changed:print_log("IP address changed to " + current_ip)data = urllib.urlencode(values)req = urllib2.Request(url, data)response = urllib2.urlopen(req)content = response.read()myinfo = json.loads(content)if myinfo["status"]["code"] == "1": print_log("dnspod DDNS updated")# print_log("IP address not changed yet")

2. 使用您自己的设置更改源代码中的变量(请注意代码中的注释)

3. 将dnspod.py保存到linux服务器中/bin(使用winscp或者在vi/nano中粘贴)

4. 执行以下命令:

chmod +x /bin/dnspod.py

5. 执行以下命令进行测试

/bin/dnspod.py

6. 执行以下命令检查程序输出

tail /var/log/dnspod.log

7. 请确认程序输出了 “IP address changed to xx.xx.xx.xx, dnspod DDNS updated” 即可

8. 执行以下命令打开linux中的计划任务描述文件

crontab -e

9. 在cron的任务文件描述中加入以下一行内容并保存,此后每隔10分钟将自动执行此程序一次

*/10 * * * * /bin/dnspod.py

10. 完成!

如何获取domain_id及record_id?


  1. 请复制以下代码并保存到 /bin/dnspod_info.py

#!/usr/bin/env pythonimport urllib
import urllib2
import json
import sysif len(sys.argv) < 3:print("usage: dnspodinfo <login email> <password>")sys.exit()url = "https://dnsapi.cn/Domain.List"
values = {"login_email": sys.argv[1],"login_password": sys.argv[2],"format": "json"
}data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
content = response.read()myinfo = json.loads(content)for domain in myinfo["domains"]:url1 = "https://dnsapi.cn/Record.List"domain_id = str(domain["id"])domain_name = domain["name"]print("Domain: " + domain_name + " (id = " + domain_id + ")")values1 = {"login_email": values["login_email"],"login_password": values["login_password"],"domain_id": domain_id,"format": "json"}data1 = urllib.urlencode(values1)req1 = urllib2.Request(url1, data1)response1 = urllib2.urlopen(req1)content1 = response1.read()myinfo1 = json.loads(content1)for record in myinfo1["records"]:r_id = record["id"]r_name = record["name"]r_value = record["value"]r_ttl = record["ttl"]r_line = record["line"]r_enable = record["enabled"]r_type = record["type"]print("    " + r_id + ": " + r_name + "." + domain_name + " -> " + \r_value + " type=" + r_type + " ttl=" + r_ttl + " line=" + r_line + \ " enabled=" + r_enable + " timestamp=" + record["updated_on"])

2. 输入命令,标记可执行

chmod +x /bin/dnspod_info.py

3. 输入以下命令并执行, 注意把email地址和密码换成你在dnspod自己注册的

/bin/dnspod_info.py account@email.com password

4. 查看程序输出,如下图所示

5. 图中黄框标出的即为domain_id, 蓝框标出的是头名为ihome的主机记录的record_id

转载于:https://blog.51cto.com/iplayit/1575600

dnspod.cn 动态域名客户端相关推荐

  1. 希网动态域名 客户端(系统服务)

    希网动态域名开放更新协议,官方提供的客户端不支持 以服务方式更新IP, 所以写了个.NET的系统服务.  希望大家喜欢 把下面源码存为  cn99.cs 修改对应的帐号, 再用下面的命令行编译,安装为 ...

  2. CentOS通过DNSpod实现动态域名

    因为家里使用ADSL动态IP上网,有时在外面需要使用家里资源,原本使用的是TP-LINK自带的花生壳解析,用过之后发现很不稳定.因为自己注册了域名也已使用了DNSPOD解析. 1.新建脚本文件 vim ...

  3. 让我们用 Node.js 写自己的 DDNS 动态域名程序

    原文链接:http://xcoder.in/2014/09/20/lets-build-ourselves-ddns/ 起因 一开始我在移动的宽带中.那个时候虽然还不是完全的局域网,但是电信网络访问不 ...

  4. 花生壳动态域名详细试用方法

    花生壳动态域名使用方法(详解) 1. 首先登录 花生壳网站  http://www.oray.com/,在 导航栏 中选择"花生壳",然后点击"花生壳下载",根 ...

  5. 益和VA 5 多动态域名引擎,无固定IP者的福音

    益和VA 5 多动态域名引擎,无固定IP者的福音 前言 益和VA 5 虚拟应用管理平台 内置动态域名引擎,让域名解析畅快淋漓.更多中小企业都是使用的xDSL方式上网 ,在没有固定IP连接时,需要安装域 ...

  6. 新狼邮箱服务器,搭建简单的邮件服务器+动态域名在互联网中使用

    利用server2003搭建简单的邮件服务器,使用动态域名做mx记录可以在互联网中使用,开始之前我copy了一些资料让大家了解一下pop3和smtp. POP3(Post Office Protoco ...

  7. dnspod 动态域名的使用。openwrt使用dnspod动态域名解析。

    这里主要说的是linux shell下的使用. 先看接口说明: 接口地址: https://dnsapi.cn/Record.Ddns HTTP请求方式: POST 请求参数: 公共参数 domain ...

  8. RouterOS(ros)软路由实现DDNS动态域名功能(DNSPOD)

    DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地 ...

  9. dnspod每步nat123及3322动态域名同类端口映射域名解析软件对比

    首先说明下这三个名词:端口映射.域名解析.动态域名解析. 端口映射 80端口映射或自定义端口映射.可以解决80端口被屏蔽,可以在内网使用直接发布网站应用,可以在内网使用实现外网访问内网应用. 域名解析 ...

  10. dnspod每步nat123及3322动态域名同类网络辅助软件对比

    直接正题,就使用体会对比域名解析/动态域名/动态域名解析/端口映射相关免费软件或平台. dnspod dnspod域名解析.不需要转入域名.URL隐性转发另收费. dnspod动态域名解析.不需要转入 ...

最新文章

  1. 3.4.3 嵌套查询
  2. python程序官方网站-IO编程
  3. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
  4. 子div在父div中置底
  5. 内存首地址为1000h_C++虚继承,菱形继承,内存分布
  6. 2018-2019 20165227《信息安全系统设计基础》第三周学习总结
  7. python中int input_python中的input是什么
  8. 结构化思维:掌握这3点,分析报告不再愁
  9. 服务器端口映射到公网不通解决方法
  10. LAV Filter 源代码分析 1: 总体结构
  11. 利用Javacsv实现Java读写csv文件
  12. Join的实现步骤 以及连接的概念
  13. python多线程刷网站流量(含ip代理池文档,可制作成exe文件挂服务器代刷)
  14. 苹果官网html简单代码,苹果官网CSS3应用案例分析
  15. 微信小程序分享小程序码的生成(带参数)以及参数的获取
  16. 伺服舵机四方运动程序以及角度确定
  17. Charles+Chrome+https,提示隐私设置错误,您的连接不是私密连接
  18. 小程序源码:AI微信小程序源码下载人脸照片AI转换动漫照片全新源码安装简单无需服务器域名-多玩法安装简单
  19. Kotlin只是一个“网红,【面试必备】
  20. Docker学习之四:容器虚拟化网络与docker网络

热门文章

  1. 使用系统文件检查器工具修复丢失或损坏的系统文件
  2. div+css静态网页设计 web网页设计实例作业 ——中国水墨风的小学学校网站(6页) 专题网页设计作业模板 学校物静态HTML网页模板下载
  3. 人机融合智能时代的人心
  4. Bean Validation
  5. 详解 torch.max 函数
  6. SQL Server版本和下载地址
  7. matlab 矩阵累乘,matlab,SAS iml 矩阵运算
  8. 听我的!千万别学前端开发!
  9. 【51单片机】74HC595串转并 使用
  10. HTML5,不只是看上去很美 (第一弹:彩虹爆炸图)