Python腳本實(shí)現(xiàn)DNSPod DNS動(dòng)態(tài)解析域名
閑暇之余,在家里自建了個(gè)服務(wù)器,因?yàn)橛玫男^(qū)寬帶,IP位動(dòng)態(tài)分配。域名解析就是個(gè)問題,我的域名一般停放在DNSPod下。DNSPod有提供修改的API,就用Python簡(jiǎn)單的實(shí)現(xiàn)了一下動(dòng)態(tài)解析。這樣,就不用安裝花生殼了。 廢話不說,看代碼:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import httplib, urllib, urllib2
import time
import sys,os
import re
import json
username = 'xxxx' #賬號(hào)
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'] = '默認(rèn)'
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基于whois模塊簡(jiǎn)單識(shí)別網(wǎng)站域名及所有者的方法
- Python批量查詢域名是否被注冊(cè)過
- Python的Flask框架中配置多個(gè)子域名的方法講解
- Python的Flask框架中SERVER_NAME域名項(xiàng)的配置教程
- python實(shí)現(xiàn)域名系統(tǒng)(DNS)正向查詢的方法
- Python實(shí)現(xiàn)獲取域名所用服務(wù)器的真實(shí)IP
- 探究Python的Tornado框架對(duì)子域名和泛域名的支持
- python使用urlparse分析網(wǎng)址中域名的方法
- python3實(shí)現(xiàn)域名查詢和whois查詢功能
相關(guān)文章
基于Python開發(fā)一個(gè)Instant Messaging(IM)聊天工具
在現(xiàn)代社會(huì)中,即時(shí)通訊工具已經(jīng)成為人們?nèi)粘贤ǖ闹匾ぞ?本文將詳細(xì)介紹如何開發(fā)一個(gè)簡(jiǎn)單的IM聊天工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析
這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法,結(jié)合實(shí)例形式分析了Beautiful Soup的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-12-12
python 接口測(cè)試response返回?cái)?shù)據(jù)對(duì)比的方法
本篇文章主要介紹了python 接口測(cè)試response返回?cái)?shù)據(jù)對(duì)比的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
python實(shí)現(xiàn)移動(dòng)木板小游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)移動(dòng)木板小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
Python實(shí)現(xiàn)按照指定要求逆序輸出一個(gè)數(shù)字的方法
這篇文章主要介紹了Python實(shí)現(xiàn)按照指定要求逆序輸出一個(gè)數(shù)字的方法,涉及Python針對(duì)字符串的遍歷、判斷、輸出等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04

