Python脚本实现DNSPod DNS动态解析域名


Posted in Python onFebruary 14, 2015

闲暇之余,在家里自建了个服务器,因为用的小区宽带,IP位动态分配。域名解析就是个问题,我的域名一般停放在DNSPod下。DNSPod有提供修改的API,就用Python简单的实现了一下动态解析。这样,就不用安装花生壳了。 废话不说,看代码:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import httplib, urllib, urllib2
import time
import sys,os
import re
import json

username = 'xxxx' #账号
password = 'xxx' #密码
format = 'json'

domain = [u'www.youdomain.com'] #要解析的域名

def get_domain_info(domain):
  domain_split = domain.split('.')
  domain_split_len = len(domain_split)
  maindomain = domain_split[domain_split_len - 2] + '.' + domain_split[domain_split_len - 1]
  return maindomain,domain

params = {'login_email':username,'login_password':password,'format':format}

def request(action, params, method = 'POST'):
  headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/json"}
  conn = httplib.HTTPSConnection("dnsapi.cn")
  conn.request(method, '/' + action, urllib.urlencode(params), headers)
  response = conn.getresponse()
  data = response.read()
  conn.close()
  if response.status == 200:
    return data
  else:
    return None

def get_my_domain_id():
  data = request('Domain.List',params)
  data = json.loads(data)
  domainlist = data.get('domains')
  domaninfo = {}
  for d in domainlist:
    domaninfo[d.get('name')] = d.get('id')
  return domaninfo

def get_my_domain_record_id(domain_id):
  params['domain_id'] = domain_id
  data = request('Record.List',params)
  data = json.loads(data)
  if data.get('code') == '10':
    return None
  domainname = data.get('domain').get('name')
  record_list = data.get('records')
  record = {}
  for r in record_list:
    if r.get('type') == 'A':
      key = r.get('name') != '@' and r.get('name') + '.' + domainname or domainname
      record[key] = {'id':r.get('id'),'value':r.get('value')}
  return record

def changerecord(domain,domain_id,record_id,ip):
  params['domain_id'] = domain_id
  params['record_id'] = record_id
  params['record_type'] = 'A'
  params['record_line'] = '默认'
  params['sub_domain'] = domain
  params['ttl'] = 600
  params['value'] = ip
  data = request('Record.Modify',params)

def getip():
  url = 'http://iframe.ip138.com/ic.asp'
  response = urllib2.urlopen(url)
  text = response.read()
  ip = re.findall(r'\d+.\d+.\d+.\d+', text)
  return ip[0] or None

def updatedomaininfo(domain):
  m,sub_m = get_domain_info(domain)
  domain_id = my_domain_id_list.get(m)
  record_list = get_my_domain_record_id(domain_id)
  if record_list == None:
    return None
  rocord_info = record_list.get(sub_m)
  record_ip = rocord_info.get('value')
  record_id = rocord_info.get('id')
  return sub_m,record_ip,record_id,domain_id

if __name__ == '__main__':
  my_domain_id_list = get_my_domain_id()
  try:
    for dm in domain:
      domaindata = updatedomaininfo(dm)
      if domaindata == None:
        continue
      dnsdomain,dnsdmainip,record_id,domain_id = domaindata
      domain_name = dnsdomain.split('.')[0]
      ip = getip()
      if ip == dnsdmainip:
        continue
      else:
        changerecord(domain_name,domain_id,record_id,ip)
  except:
    pass
Python 相关文章推荐
python利用elaphe制作二维条形码实现代码
May 25 Python
python安装与使用redis的方法
Apr 19 Python
Python中模块与包有相同名字的处理方法
May 05 Python
python删除不需要的python文件方法
Apr 24 Python
如何在Python中实现goto语句的方法
May 18 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
使用Python发现隐藏的wifi
Mar 04 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
聊一聊python常用的编程模块
May 14 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 Python
Python压缩和解压缩zip文件
Feb 14 #Python
Python简单日志处理类分享
Feb 14 #Python
Python魔术方法详解
Feb 14 #Python
Python中非常实用的一些功能和函数分享
Feb 14 #Python
深入理解Python中的元类(metaclass)
Feb 14 #Python
Python开发常用的一些开源Package分享
Feb 14 #Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 #Python
You might like
一个基于PDO的数据库操作类
2011/03/24 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
分分钟入门python语言
2018/03/20 Python
django的model操作汇整详解
2019/07/26 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
介绍一下write命令
2012/09/24 面试题
学生个人自我鉴定范文
2014/03/28 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
荒岛余生观后感
2015/06/09 职场文书
单位收入证明范本
2015/06/18 职场文书
男生贾里读书笔记
2015/06/30 职场文书
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS