1. 首页
  2. 运维开发
  3. Python

使用dnspod和python动态域名解析ddns脚本实例

众所周知,国内拨号获取到都是动态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条)

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code