美文网首页
用api修改域名简析

用api修改域名简析

作者: 站在巨人的肩膀上努力着 | 来源:发表于2023-09-18 17:58 被阅读0次

    什么是域名?

    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()
    
    

    相关文章

      网友评论

          本文标题:用api修改域名简析

          本文链接:https://www.haomeiwen.com/subject/niigvdtx.html