CloudFlare API:批量添加域名并添加解析记录
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,小生博客:http://xsboke.blog.51cto.com -------谢谢您的参考,如有疑问,欢迎交流这里先说一下,CloudFlare是一家
千家信息网最后更新 2025年12月01日CloudFlare API:批量添加域名并添加解析记录
小生博客:http://xsboke.blog.51cto.com
-------谢谢您的参考,如有疑问,欢迎交流这里先说一下,CloudFlare是一家DNS供应商(我是这么理解的),他有提供很多服务(HTTPS/CDN等等),具体的大家可以自己去官网看一下:www.cloudflare.com
CloudFlare建议使用linux的curl命令使用开发的API
因shell不能很好的处理CloudFlare返回的json数据,所以在使用shell的基础上,增加了python脚本
本文件一共有四个脚本文件配合使用:
- domians.txt :用来存放需要添加的域名
- env.env :存放各种变量
- filter_zone_id.py :用于将CloudFlare返回的数据过滤(过滤出域名及其区域ID)
- filter_dns_id.py :用于将CloudFlare返回的数据过滤(过滤出解析记录及其区域ID)
- main.sh :存放linux命令,执行时也是执行这一个脚本即可
一、 domain.txt就不用介绍了,就是把顶级域名写到里面,一行一个
二、 env.env
#!/bin/bash#通用变量#当前目录PWD=$(pwd)PYTHON=$(which python)ECHO=$(which echo)#这里DNS指的是解析记录#账号CF_API_EMAIL=CloudFlare的登录账号#秘钥CF_API_KEY=在用户信息里面查看"Global KEY"#组织名organization_name="组织名"#组织IDorganization_id="组织ID"#设置CNAME 和 IPCONTENT_CNAME=域名需要解析的别名"CNAME"CONTENT_IP=域名需要解析的别名IP#get_zone_id.cf -- 存放新增域名时Cloudflare返回的JSON 数据#get_dns_id.cf -- 存放获取DNS_ID时Cloudflare返回的JSON 数据#filter_zone_id.py -- 用于从 "get_zone_id.cf" 中过滤出域名及其相对应的区域ID并写入文件 "zone_id.cf"#filter_dns_id.py -- 用于从 "get_dns_id.cf" 中过滤出DNS_ID及其DNS_NAME并写入文件 "dns_id.cf"二、main.sh
#!/bin/bashsource ./env.env#新增域名for domain in $(cat $PWD/domains.txt)do curl -X POST -H "X-Auth-Key: ${CF_API_KEY}" \ -H "X-Auth-Email: ${CF_API_EMAIL}" \ -H "Content-Type: application/json" "https://api.cloudflare.com/client/v4/zones" \ --data '{"name":"'"${domain}"'","jump_start":true,"organization":{"name":"'"${organization_name}"'","id":"'"${organization_id}"'"}}' >> $PWD/get_zone_id.cf ${ECHO} -e "\n" >> $PWD/get_zone_id.cfdone#执行python脚本,过滤出域名的区域ID$PYTHON $PWD/filter_zone_id.py#获取DNS ID列表while read linedo ZONE_NAME=$(${ECHO} "$line" | awk '{print $1}') ZONE_ID=$(${ECHO} "$line" | awk '{print $2}') curl -X GET "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records" \ -H "X-Auth-Email: ${CF_API_EMAIL}" -H "X-Auth-Key: ${CF_API_KEY}" \ -H "Content-Type: application/json" >> $PWD/get_dns_id.cf ${ECHO} -e "\n" >> $PWD/get_dns_id.cfdone < $PWD/zone_id.cf#执行python脚本,过滤出DNS_ID$PYTHON $PWD/filter_dns_id.py#删除DNS记录#删除DNS记录还需要指定区域ID,每个域名的区域DI不同,所以进行一个判断,判断DNS_NAME是否模糊匹配之前取到的ZONE_NAME#如果匹配则使用这个ZONE_IDwhile read zonedo ZONE_NAME=$(${ECHO} "$zone" | awk '{print $1}') ZONE_ID=$(${ECHO} "$zone" | awk '{print $2}') while read dns do DNS_NAME=$(${ECHO} "$dns" | awk '{ print $1 }') DNS_ID=$(${ECHO} "$dns" | awk '{ print $2 }') if [[ "*$DNS_NAME" =~ "$ZONE_NAME" ]] then curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_ID}" \ -H "X-Auth-Email:${CF_API_EMAIL}" \ -H "X-Auth-Key:${CF_API_KEY}" \ -H "Content-Type:application/json" fi done < $PWD/dns_id.cfdone < $PWD/zone_id.cf#增加DNS记录#TTL=1 为自动#proxied=true 使用CF的CDN,等于false是不使用#data传入变量格式: "'"$EVN"'"#设置变量while read linedo ZONE_NAME=$(${ECHO} "$line" | awk '{print $1}') ZONE_ID=$(${ECHO} "$line" | awk '{print $2}') curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records" \ -H "X-Auth-Email:${CF_API_EMAIL}" \ -H "X-Auth-Key:${CF_API_KEY}" \ -H "Content-Type:application/json" \ --data '{"type":"A","name":"@","content":"'"${CONTENT_IP}"'","ttl":1,"priority":10,"proxied":true}' curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records" \ -H "X-Auth-Email:${CF_API_EMAIL}" \ -H "X-Auth-Key:${CF_API_KEY}" \ -H "Content-Type:application/json" \ --data '{"type":"CNAME","name":"www","content":"'"${CONTENT_CNAME}"'","ttl":1,"priority":10,"proxied":false}' curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records" \ -H "X-Auth-Email:${CF_API_EMAIL}" \ -H "X-Auth-Key:${CF_API_KEY}" \ -H "Content-Type:application/json" \ --data '{"type":"CNAME","name":"m","content":"'"${CONTENT_CNAME}"'","ttl":1,"priority":10,"proxied":false}'done < $PWD/zone_id.cf三、filter_zone_id.py
#!/usr/bin/env python#*- coding:utf-8 -*#打开文件获取添加域名成功后返回的数据,然后获取到域名的区域ID#通过区域ID获取DNS列表import jsonimport osimport traceback#traceback 完整输出报错信息#str(e) 只给出异常信息,不包括异常信息的类型,如1/0的异常信息#repr(e) 给出较全的异常信息,包括异常信息的类型,如1/0的异常信息PWD = os.getcwd()PWD_GET = PWD+'/get_zone_id.cf'PWD_ZONE = PWD+'/zone_id.cf'ERROR_FILE = PWD+'/zone_error.log'#读取添加域名时返回的字符串,并且循环写入字典,以便于过滤出域名的区域IDwith open (PWD_GET,'r') as file: i = 0 j = 0 dict = {} list = [] for line in file: if line.strip == " " or line == "\n" or line == " \n": continue try: dict[i]=json.loads(line) i+=1 except Exception as e: j+=1 with open (ERROR_FILE,'a+') as file: title = "----------\t\t第%d条报错信息\t\t---------"%(j) + "\n" #info = "报错信息:" + traceback.format_exc() + "\n" info = "报错信息:" + repr(e) + "\n" mation = "报错行:" + line + "\n" file.writelines(title) file.writelines(info) file.writelines(mation) continue#获取所有的key,然后进行循环遍历,获取每个域名的区域IDkeys_list = dict.keys()for key in keys_list: ID=dict[key]['result']['id'] NAME=dict[key]['result']['name'] with open (PWD_ZONE,'a+') as file: line = NAME + " " + ID + "\n" file.writelines(line)四、filter_dns_id.py
#!/usr/bin/env python#*- coding:utf-8 -*#打开文件读取cloudflare返回的DNS IDimport jsonimport osPWD = os.getcwd()PWD_GET = PWD+'/get_dns_id.cf'PWD_DNS = PWD+'/dns_id.cf'#读取获取DNS ID时返回的字符串,并且循环写入字典,以便于过滤出DNS IDwith open (PWD_GET,'r') as file: i = 0 dict = {} for line in file: if line.strip == " " or line == "\n" or line == " \n": continue dict[i]=json.loads(line) i+=1key_list = dict.keys()for key in key_list: list = dict[key]['result'] #一个域名可能有多个DNS记录,cloudflare返回的是一个列表,列表中是一个一个的字典, #一个key-values代表一个DNS记录,所以这里需要遍历列表中的字典 #通过取列表的索引值,循环每一个位置的字典 for i in list: with open (PWD_DNS,'a+') as file: line = i['name'] + " " + i['id'] + "\n" file.writelines(line)
域名
信息
区域
数据
文件
字典
脚本
变量
循环
别名
命令
字符
字符串
类型
账号
utf-8
不同
成功
一家
一行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
app软件开发搭建
爱立信网络技术
mongo中如何删除数据库
促销 数据库 设计
数据库写出求2个整数的和
2020年安徽省网络安全
网络安全信息自查工作总结
dedecms数据库备份
录音服务器怎么远程
纪实软件开发
网络安全标语精选
网络安全责任制度一建
计算机三级数据库技术模拟题
浦东新区定制软件开发诚信服务
如何把github搭建成服务器
局域网网络硬盘服务器
中国最强的服务器架构
主观网络安全意识
vs创建桌面数据库程序吗
plc上位软件开发
盛大云免费服务器
浙江电子网络技术参考价格
最新计算机网络技术数据信息
朝阳区网络技术哪家好
小学生网络安全知识讲话稿
网零基础学网络安全
嵌套查询用什么数据库
服务器下载安装包下载不了
票据授权服务器是什么的一部分
手机桌面数据库怎么导入电脑