获取本机IP和更新DNS

This commit is contained in:
New Future
2016-06-10 19:51:22 +08:00
parent 7efd671288
commit 1ff0f087f7
5 changed files with 169 additions and 0 deletions
+1
View File
@@ -137,3 +137,4 @@ $RECYCLE.BIN/
# Windows shortcuts
*.lnk
config.json
+99
View File
@@ -0,0 +1,99 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# DNSPOD API 接口
import httplib
import urllib
import json
TOKEN = "yourid,yourkey" # token
PROXY = None # 代理设置
_domain_id_list = {}
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
def request(action, params, method='POST'): # 发送请求
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/json"}
API_SITE = "dnsapi.cn"
if PROXY:
conn = httplib.HTTPSConnection(PROXY)
conn.set_tunnel(API_SITE, 443)
else:
conn = httplib.HTTPSConnection(API_SITE)
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_domain_id(): # 获取域名ID
if len(_domain_id_list) > 0:
return _domain_id_list
else:
params = {'login_token': TOKEN, 'format': 'json'}
data = request('Domain.List', params)
data = json.loads(data)
domainlist = data.get('domains')
for d in domainlist:
_domain_id_list[d.get('name')] = d.get('id')
return _domain_id_list
def get_domain_record_id(domain_id, domain_type="A"): # 获取记录ID
params = {'login_token': TOKEN, 'domain_id': domain_id, 'format': 'json'}
data = request('Record.List', params)
data = json.loads(data)
if data.get('code') == '10':
return None
# print(domain_id, data)
domain = data.get('domain')
if not domain:
return None
domainname = domain.get('name')
record_list = data.get('records')
record = {}
# print record_list[0]
for r in record_list:
# print(r.get('id'), r.get('name'), r.get('type'),r.get('value'))
if r.get('type') == domain_type:
key = r.get('name') != '@' and r.get('name') + '.' + domainname or domainname
record[key] = {'id': int(r.get('id')), 'value': r.get('value'), 'sub': r.get('name')}
return record
def update_domain_info(domain, domain_type="A"): # 更新域名信息
m, sub_m = get_domain_info(domain)
domain_id = get_domain_id().get(m)
record_list = get_domain_record_id(domain_id, domain_type)
# print(record_list)
if record_list == None:
return None
record_info = record_list.get(sub_m)
if record_info == None:
return None
record_info['did'] = domain_id
return record_info
def change_record(domain, value, record_type="A"): # 更改记录
info = update_domain_info(domain, record_type)
if info == None:
return None
elif info['value'] == value:
return domain, value
params = {'login_token': TOKEN, 'value': value, 'sub_domain': info['sub'],
'domain_id': info['did'], 'record_id': info['id'], 'record_type': record_type,
'format': 'json', 'ttl': 600, 'record_line': '默认', }
return request('Record.Modify', params)
+14
View File
@@ -0,0 +1,14 @@
{
"id": "your token id",
"token": "your dnspod token",
"ipv4": [
"ipv4.your.domain",
"ipv4.yours.domain"
],
"ipv6": [
"ipv6.your.domain"
],
"index4": 0,
"index6": 0,
"proxy": null
}
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import socket
DEBUG = False
def local_v6(i=0): # 本地ipv6地址
info = socket.getaddrinfo(socket.gethostname(), 0, socket.AF_INET6)
if DEBUG: print(info)
return info[i][4][0]
def local_v4(i=0): # 本地ipv4地址
info = socket.getaddrinfo(socket.gethostname(), 0, socket.AF_INET)
if DEBUG: print(info)
return info[i][-1][0]
+38
View File
@@ -0,0 +1,38 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import dnspod
import ip
import json
def get_config(key=None, file="config.json"):
if not hasattr(get_config, "config"):
try:
with open(file) as configfile:
get_config.config = json.load(configfile)
except:
exit('fail to load config from file: %s' % file)
if key:
return get_config.config.get(key)
else:
return get_config.config
def update():
ipv4 = ip.local_v4(get_config('index4'))
print 'update ipv4 to:', ipv4
if ipv4 != None:
for domain in get_config('ipv4'):
print dnspod.change_record(domain, ipv4, 'A')
ipv6 = ip.local_v6(get_config('index6'))
print 'update ipv6 to:', ipv6
if ipv6 != None:
for domain in get_config('ipv6'):
print dnspod.change_record(domain, ipv6, 'AAAA')
if __name__ == '__main__':
dnspod.TOKEN = "%s,%s" % (get_config('id'), get_config('token'))
dnspod.PROXY = get_config('proxy')
update()