技术系列 · 2024年 2月 11日

cloudflare批量DNS 解析域名到指定地址

cloudflare是国外知名的 CDN 服务商,个人可以免费使用,也支持 API 操作。正好遇到批量解析域名到指定 IP 地址的需求,翻阅众多文章,魔改下脚本如下(Python),可以批量修改 DNS 地址,不使用proxy,SSL 为flexible模式。

# -*- coding:utf-8 -*-
import requests
import json
import csv
import random
import datetime

'''
1.批量获取所有账户下域名
2.批量修改DNS默认添加www和主域名
3.修改SSL模式为flexible
'''
####################
vps = 'ghs.googlehosted.com'  # 修改为需要解析的ip
#####################


if __name__ == "__main__":
    email = ''  # CF账号
    api = ''  # API
    domain = None
    names = ['www', domain]  # 默认添加www和主域名
    headers = {'X-Auth-Email': email,
               'X-Auth-Key': api,
               'Content-Type': 'application/json'}
    proxies = {'http': 'http://127.0.0.1:1080', 'https': 'https://127.0.0.1:1080'}
    # r = requests.get('https://api.cloudflare.com/client/v4/accounts?page=1&per_page=20&direction=desc', headers=headers)
    # print(r.json())
    # account_id = r.json()['result'][0]['id']
    # data1 = {'name': domain, 'account': {'id': account_id, 'name': email}, 'jump_start': False}

    # '''
    # 获取域名
    url1 = 'https://api.cloudflare.com/client/v4/zones'
    r = requests.get(url1, headers=headers)
    r_result = r.json()
    # print(r_result)
    for i in r_result['result']:
        print(i['name'])
        domain = i['name']
        domain_id = i['id']
         # 添加DNS
        for name in names:
            data2 = {'type': 'CNAME',
                    'name': name,
                    'content': vps,
                    'ttl': 1,
                    'priority': 0,
                    'proxied': False}
            url2 = 'https://api.cloudflare.com/client/v4/zones/' + domain_id + '/dns_records'
            r = requests.post(url2, data=json.dumps(data2), headers=headers)
        # print(r.json()['result'])
        # 修改SSL模式
        url3 = 'https://api.cloudflare.com/client/v4/zones/' + domain_id + '/settings/ssl'
        r = requests.patch(url3, data=json.dumps({'value': 'flexible'}), headers=headers)
        print('恭喜! %s 添加成功.' % domain)