什么是域名?
https://www.cloudflare-cn.com/learning/dns/glossary/what-is-a-domain-name/
什么是 DNS?
https://www.cloudflare-cn.com/learning/dns/what-is-dns/
什么是 DNS 记录?
https://www.cloudflare-cn.com/learning/dns/dns-records/
需要调用的api有,接口具体使用说明:https://developers.cloudflare.com/api/operations/zones-get
1.获取该账号下的所有域名
2.通过域名id新增域名record
3.也可以域名ID和record_id,修改record记录
具体参考代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests, json
CF_API_EMAIL = 'XXXX@gmail.com'
CF_API_KEY = 'XXXXXXX'
HEADER = {
'Content-Type': 'application/json',
'X-Auth-Email': CF_API_EMAIL,
'X-Auth-Key': CF_API_KEY,
}
def data_json():
data_records = []
data_records.append({
'name': 'aaaa',
'type': 'A',
'content': '',
'ttl': 1,
'priority': 100,
'proxied': False,
'comment': 'test'
})
data_records.append({
'name': 'bbbb',
'type': 'A',
'content': '',
'ttl': 1,
'priority': 100,
'proxied': False,
'comment': 'test'
})
return data_records
#新增record记录
def inster_info(zone_id,data):
api_url = 'https://api.cloudflare.com/client/v4/zones/%s/dns_records/' %zone_id
data = data
response = requests.post(api_url, headers=HEADER, data=json.dumps(data))
print(response.status_code, response.json())
return response
# 修改recore记录
def update_info(zone_id, dns_id, data):
api_url = 'https://api.cloudflare.com/client/v4/zones/%s/dns_records/%s' %(zone_id, dns_id)
data = data
response = requests.put(api_url, headers=HEADER, data=json.dumps(data))
print(response.status_code, response.json())
return response
#获取账号里所有域名
def get_zones():
zones_ids = []
url = 'https://api.cloudflare.com/client/v4/zones?per_page=50'
page = 1
while page:
url_new = url + '&page=' + str(page)
print(url_new)
res = requests.get(url_new, headers=HEADER)
if res.status_code == 200:
for r in res.json()['result']:
zones_ids.append((r['id'], r['name'], r['status']))
if page >= res.json()['result_info']['total_pages']:
page = False
else:
page = page + 1
else:
print('error', res.text)
break
return zones_ids
#获取对应域名的历史recore
def get_info(page, zone_id):
api_url = 'https://api.cloudflare.com/client/v4/zones/%s/dns_records?page=%s&per_page=100&match=all' %(zone_id, page)
response = requests.get(api_url, headers=HEADER)
dns_res = response.json()['result']
return dns_res
# 新增或修改单个recore的逻辑
def check_records(zone_id, domain, ip, tag):
flag = True
dns_res_list = []
page = 1
while flag:
dns_res = get_info(page, zone_id)
if dns_res:
for i in dns_res:
dns_res_list.append(i)
else:
flag = False
page += 1
dns_list = ['%s-%s' % (i['name'], i['type'])for i in dns_res_list]
print('dns_list',dns_list)
#读取update_dns_list数据
if tag=='add':
data_num = data_json()
for j in data_num:
j['content'] = ip
if j['name'] == '@':
key = domain
else:
key = j['name'] +'.'+ domain
name = '%s-%s' %(key, j['type'])
if name in dns_list:
print ('%s Is Aleary Exist! Please Check It , Do Not Add Again' % key)
else:
print ('Start Add %s in dns list!' % key)
data = j
print('data', data)
inster_info(zone_id, data)
elif tag=='update':
data_num = data_json()
print(data_num,'data_num')
for dns in dns_res_list:
dns_id = dns['id']
dns_name = dns['name']
dns_type = dns['type']
dns_domain = dns['zone_name']
for data in data_num:
data['content'] = ip
if data['name'] == "@":
domain_name = dns_domain
else:
domain_name = data['name'] + "." + dns_domain
print(dns_name,domain_name,dns_type)
if dns_name == domain_name and dns_type == data['type']:
print('data', data)
update_info(zone_id, dns_id, data)
# 验证和处理修改recore逻辑
def manage_update_records():
#读取文件里需要处理的域名和ip
domain_dict = {}
for list in open("zoneid_domain.txt"):
domain_info = list.replace('\n', '').split(',')
domain_dict[domain_info[0]] = domain_info[1]
#获取账号下的所有域名信息
domain_check = domain_dict.keys()
zones_list = get_zones()
for zid, domain, status in zones_list:
if domain in domain_check:
print(check_records(zid, domain, domain_dict[domain], 'update'))
# 验证和处理新增recore逻辑
def manage_add_domain():
#读取文件里需要处理的域名和ip
domain_dict = {}
for list in open("zoneid_domain.txt"):
domain_info = list.replace('\n', '').split(',')
domain_dict[domain_info[0]] = domain_info[1]
#获取账号下的所有域名信息
domain_check = domain_dict.keys()
zones_list = get_zones()
for zid, domain, status in zones_list:
if domain in domain_check:
print(check_records(zid, domain, domain_dict[domain], 'add'))
if __name__ == '__main__':
manage_add_domain()
# manage_update_records()
网友评论