众所周知,国内拨号获取到都是动态ip地址,如果想让动态ip解析到域名一般使用的ddns服务有花生壳,金万维等。不过免费的花生壳我现在碰到很多次解析问题。找了dnspod的api,再加上脚本,应该很容易可以实现。
首先需要准备一个付费的域名和拨号环境中的服务器一台。
如下脚本中的username,password,domain_id,record_id,sub_domain等值按照实际情况修改。部署以下类似脚本到本地环境,加入crontab即可。
脚本如下:
#coding:utf-8
import urllib2
import urllib
import json
import os
import datetime
username='xxx'
password='xxx'
type1='json'
domain_id=xxx
record_id=xxx
def MonitorRecordChange():
#获取本地ip
os.system('export PATH=$PATH;curl -o /tmp/ipinfo.txt http://ipinfo.io/ >/dev/null 2>&1')
f=file('/tmp/ipinfo.txt','rb')
localip=json.loads(f.read())['ip']
f.close()
#获取dnspod记录
url='https://dnsapi.cn/Record.Info'
values={
'login_email':username,
'login_password':password,
'format':type1,
'domain_id':domain_id,
'record_id':record_id,
}
data=urllib.urlencode(values)
req=urllib2.Request(url,data)
req.add_header('User-Agent', 'NBHAO DDNS Client/1.0.0 (admin@nbhao.org) blog.nbhao.org')
response = urllib2.urlopen(req)
recordip=json.loads(response.read())['record']['value']
#修改记录
if localip != recordip:
url='https://dnsapi.cn/Record.Modify'
values={
'login_email':username,
'login_password':password,
'format':type1,
'domain_id':domain_id,
'record_id':record_id,
'sub_domain':'sijitao.net',
'value':localip,
'record_type':'A',
'record_line':'默认',
}
data=urllib.urlencode(values)
req=urllib2.Request(url,data)
req.add_header('User-Agent', 'NBHAO DDNS Client/1.0.0 (admin@nbhao.org) blog.nbhao.org')
try:
response = urllib2.urlopen(req)
print "Domain Record Change Successfully!%s --> %s" % (recordip,localip)
except:
print "Domain Record Change Failed!%s --> %s" % (recordip,localip)
else:
print "%s Domain Record Is Not Need To Change." % datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if __name__ == '__main__':
MonitorRecordChange()
这里dnspod的api用的用户名和密码非常不爽。
dnspod的api文档:https://www.dnspod.cn/docs/index.html
=========== 2019-08-27 更新============
阿里云API实现DDNS脚本:http://blog.nbqykj.cn/?p=3077.html
正文完
微信搜一搜“奇悦电脑科技”或扫描二维码关注我们
