首页 > 代码库 > dnspod.cn 动态域名客户端(仅用于网关路由器)

dnspod.cn 动态域名客户端(仅用于网关路由器)


请注意:

  • 此客户端代码仅限于运行在直接连接在互联网的设备上(一般来说就是网关路由器)

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

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

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


安装方法:

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

  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. 完成!


#!/user/bin/env python
#coding=utf-8

import urllib, urllib2, json
import socket, struct, fcntl
import sys, os, time

url = "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)

# 使用你自己的设置更改以上内容

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)
	return socket.inet_ntoa(fcntl.ioctl(
		s.fileno(),
		0x8915,
		struct.pack("256s", interface[:15])
		)[20:24]
	)

def 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 = True


if 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")


本文出自 “iPlay IT” 博客,转载请与作者联系!

dnspod.cn 动态域名客户端(仅用于网关路由器)