众所周知,国内拨号获取到都是动态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
评论列表(0条)
😈 😈 😈
大哥你牙都快笑落了…
@章郎虫: ❗ ❗ ❗
好像有点难。
@筛宝网: 这个脚本直接可以使用,只需要修改下对应信息即可。几天测试下来暂时没有问题。