热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python脚本实现DNSPodDNS动态解析域名

这篇文章主要介绍了Python脚本实现DNSPodDNS动态解析域名,本文直接给出实现代码,需要的朋友可以参考下
闲暇之余,在家里自建了个服务器,因为用的小区宽带,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

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 去掉空格的方法——Python工程师招聘标准与实践
    本文介绍了去掉空格的方法,并结合2019独角兽企业招聘Python工程师的标准与实践进行讨论。同时提供了一个转载链接,链接内容为更多相关信息。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
author-avatar
默默-的米线_601
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有