Python脚本实现DNSPod DNS动态解析域名
admin
2023-07-31 02:18:35
0

闲暇之余,在家里自建了个服务器,因为用的小区宽带,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

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...