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

发表时间:2015-12-15 12:14 | 分类:Python | 浏览:4,566 次

众所周知,国内拨号获取到都是动态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脚本:https://zhangnq.com/3077.html

本文标签:

本文链接:https://www.sijitao.net/2334.html

欢迎您在本博客中留下评论,如需转载原创文章请注明出处,谢谢!

已经有5个回复
Comment (5)
Trackbacks (0)
  1. 佛山不锈钢管厂家  ( 2015.12.16 14:49 ) : #-9

    :twisted: :twisted: :twisted:

  2. 筛宝网  ( 2015.12.17 13:19 ) : #-8

    好像有点难。

    • 章郎虫  ( 2015.12.17 13:23 ) :

      @筛宝网: 这个脚本直接可以使用,只需要修改下对应信息即可。几天测试下来暂时没有问题。

  1. 还没有Trackbacks
一键脚本 博客历程 留言联系 文章归档 网站地图 谷歌地图
Copyright © 2010-2024 章郎虫博客 All Rights Reserved.