Cloudflare全自动优选IP自动解析到域名,适用多平台
Windows、openwrt、群晖及任意vps都可以,可以通过1条命令指令自动任务,像宝塔面板,1panel等面板可以通过定时任务执行,通常3-6小时一次就行
一、windows使用方法:
1、安装python3,下载安装时勾选设置path环境变量,否则你要手动配置很麻烦.
2、管理员方式运行CMD,输入命令:pip install requests
安装requests,安装成功后即可
3、保存文章下方脚本代码到电脑,最好放在没有中文路径的文件夹下,文件保存为如:cf-ip-hongkong.py
4、修改脚本配置:
获取令牌:api_token在CF域名管理右侧点击获取你的api令牌,点击创建令牌,点击第一个:编辑区域 DNS模板,在下方获取后记得保存,token只显示一次。
获取zone_id:zone_id在域名管理右侧的api区域ID
输入你需要解析到的域名,可以是一级域名或者二级域名,推荐使用二级域名
需修改配置地方:
# Cloudflare API参数
api_token = "XXXXXXXXXXXXX" # 此处为具备域名DNS修改的token
zone_id = "XXXXXXXXXXXXX" # 此处为CF域名管理界面右侧的api区域ID
subdomain = "xxx.iizz.us.kg" # 需要解析到的二级域名,xxx处自定义
ps:配置好以后双击脚本即可,须在科学网络环境下才能执行成功
设置自动运行:
- 开始菜单运行或者cmd输入:taskschd.msc命令
- 在任务计划程序创建任务 设置触发器,操作那边导入脚本即可
二、openwrt使用方法
1、登录openwrt,左侧找到-系统——软件包——搜索python3并安装
2、继续搜索pip并安装
3、登录openwrt终端,输入命令pip install requests 安装依赖requests
4、打开openwrt文件管理,将配置好的脚本上传到root文件夹
5、设置权限chmod +x /root/xxx.py
xxx.py注意文件名修改为你实际的文件名
6、终端输入python3 你的文件名.py 检验是否成功
设置自动运行须在科学网络环境下才能执行成功
查看python3路径:终端输入which python3,通常目录为/usr/bin/python3
假设5小时运行一次:
0 /5 /usr/bin/python3 /root/youxuan.py #意思为每年,每月,每天,每间隔5小时执行一次脚本
脚本:脚本分为3个
1、cf官方移动延迟低于100M
import requests
import csv
# Cloudflare API参数
api_token = "****"
zone_id = "****"
domain = "****" # 您的二级域名
# Cloudflare API端点
api_url = f"https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records"
# 请求标头
headers = {
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json"
}
# 删除指定二级域名下的所有 DNS 记录
def delete_all_dns_records():
response = requests.get(api_url, headers=headers, params={"name": domain})
if response.status_code == 200:
result = response.json()
dns_records = result["result"]
dns_record_ids = [record["id"] for record in dns_records]
for record_id in dns_record_ids:
delete_response = requests.delete(f"{api_url}/{record_id}", headers=headers)
if delete_response.status_code == 200:
print(f"已删除 DNS 记录: {record_id}")
else:
print(f"删除 DNS 记录时出错:{delete_response.text}")
else:
print("获取 DNS 记录时出错:", response.text)
# 获取优选 IP 数据并筛选延迟最低的 3 个数据
def fetch_and_filter_ips():
url = "https://api.345673.xyz/get_data"
key = "o1zrmHAF"
data = {"key": key}
response = requests.post(url, json=data)
if response.status_code == 200:
result = response.json()
if result["code"] == 200:
info = result["info"]
ip_list = []
for category_name, ips in info.items():
for ip_info in ips:
delay_str = ip_info["delay"].replace("ms", "")
try:
delay = float(delay_str)
ip_info["delay"] = delay
ip_info["category"] = category_name # 添加 category 信息
ip_list.append(ip_info)
except ValueError:
print("无法转换延迟值为浮点数:{}".format(ip_info['delay']))
# 按延迟排序并取前 3 个
ip_list.sort(key=lambda x: x["delay"])
top_3_ips = ip_list[:3]
with open('ip.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ["节点类别", "IP地址", "线路", "节点", "延迟", "下载速度", "时间"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for ip_info in top_3_ips:
writer.writerow({
"节点类别": ip_info["category"],
"IP地址": ip_info["ip"],
"线路": ip_info["line"],
"节点": ip_info["node"],
"延迟": ip_info["delay"],
"下载速度": ip_info["downloadspeed"],
"时间": ip_info["time"]
})
return [ip_info["ip"] for ip_info in top_3_ips]
else:
print("请求失败,错误信息:{}".format(result['info']))
else:
print("请求失败,状态码:{}".format(response.status_code))
return []
# 将筛选后的 IP 地址解析到 Cloudflare 域名下
def add_dns_records(ip_addresses):
for ip_address in ip_addresses:
data = {
"type": "A",
"name": domain,
"content": ip_address,
"ttl": 1,
"proxied": False
}
response = requests.post(api_url, headers=headers, json=data)
if response.status_code == 200:
print(f"IP地址 {ip_address} 已成功解析到 Cloudflare 域名下")
else:
print(f"解析IP地址 {ip_address} 时出错:{response.text}")
# 主函数
def main():
delete_all_dns_records()
ip_addresses = fetch_and_filter_ips()
if ip_addresses:
add_dns_records(ip_addresses)
print("所有操作已完成")
else:
print("没有符合条件的 IP 地址")
if __name__ == "__main__":
main()
脚本2、CF官方IP
import requests
import csv
# Cloudflare API参数
api_token = "*********"
zone_id = "*****"
subdomain = "*****" # 您的二级域名
# Cloudflare API端点
api_url = f"https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records"
# 请求标头
headers = {
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json"
}
# 发送GET请求以获取所有指定二级域名下的DNS记录
response = requests.get(api_url, headers=headers, params={"name": subdomain})
# 检查响应状态码
if response.status_code == 200:
# 解析JSON响应
data = response.json()
# 遍历每个DNS记录并删除它们
for record in data['result']:
record_id = record['id']
# 构造删除记录的API端点
delete_url = f"{api_url}/{record_id}"
# 发送DELETE请求以删除记录
delete_response = requests.delete(delete_url, headers=headers)
# 检查删除记录的响应状态码
if delete_response.status_code == 200:
print(f"已成功删除DNS记录:{record['name']} - {record['content']}")
else:
print(f"删除DNS记录时出错:{delete_response.text}")
# 删除完毕后,您可以继续添加新的记录
# 定义文件URL和保存路径
url = "https://raw.githubusercontent.com/ymyuuu/IPDB/main/bestcf.txt"
save_path = "result.csv"
# 发送GET请求到URL
response = requests.get(url)
# 检查请求是否成功(状态码为200)
if response.status_code == 200:
# 解码响应内容为文本
content = response.text
# 将内容分割成行
lines = content.split('\n')
# 以写入模式打开CSV文件
with open(save_path, 'w', newline='', encoding='utf-8') as csvfile:
# 创建CSV写入器对象
csv_writer = csv.writer(csvfile)
# 遍历每一行
for line in lines:
# 通过空格分割行
data = line.split()
# 将数据写入CSV文件
csv_writer.writerow(data)
print("数据已保存到", save_path)
# 从CSV文件中读取IP地址并解析到Cloudflare域名下
with open(save_path, 'r', newline='', encoding='utf-8') as csvfile:
# 创建CSV读取器对象
csv_reader = csv.reader(csvfile)
# 跳过标题行(如果有的话)
next(csv_reader)
# 读取每一行数据
for row in csv_reader:
ip_address = row[0] # 假设IP地址在第一列
# Cloudflare API端点
api_url = f"https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records"
# 请求主体
data = {
"type": "A",
"name": subdomain,
"content": ip_address,
"ttl": 1, # TTL(生存时间),以秒为单位
"proxied": False # 关闭Cloudflare代理
}
# 发送POST请求以创建DNS记录
response = requests.post(api_url, headers=headers, json=data)
# 检查响应状态码
if response.status_code == 200:
print(f"IP地址 {ip_address} 已成功解析到 Cloudflare 域名下")
else:
print(f"解析IP地址 {ip_address} 时出错:", response.text)
else:
print("无法从URL检索数据")
else:
print("获取DNS记录时出错:", response.text)
脚本3、CF反代IP(香港)30分钟更新一次
import requests
import csv
# Cloudflare API参数
api_token = "****"
zone_id = "****"
subdomain = "****" # 您的二级域名
# Cloudflare API端点
api_url = f"https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records"
# 请求标头
headers = {
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json"
}
# 发送GET请求以获取所有指定二级域名下的DNS记录
response = requests.get(api_url, headers=headers, params={"name": subdomain})
# 检查响应状态码
if response.status_code == 200:
# 解析JSON响应
data = response.json()
# 遍历每个DNS记录并删除它们
for record in data['result']:
record_id = record['id']
# 构造删除记录的API端点
delete_url = f"{api_url}/{record_id}"
# 发送DELETE请求以删除记录
delete_response = requests.delete(delete_url, headers=headers)
# 检查删除记录的响应状态码
if delete_response.status_code == 200:
print(f"已成功删除DNS记录:{record['name']} - {record['content']}")
else:
print(f"删除DNS记录时出错:{delete_response.text}")
# 删除完毕后,您可以继续添加新的记录
# 定义文件URL和保存路径
url = "https://raw.githubusercontent.com/ymyuuu/IPDB/main/bestproxy.txt"
save_path = "result.csv"
# 发送GET请求到URL
response = requests.get(url)
# 检查请求是否成功(状态码为200)
if response.status_code == 200:
# 解码响应内容为文本
content = response.text
# 将内容分割成行
lines = content.split('\n')
# 以写入模式打开CSV文件
with open(save_path, 'w', newline='', encoding='utf-8') as csvfile:
# 创建CSV写入器对象
csv_writer = csv.writer(csvfile)
# 遍历每一行
for line in lines:
# 通过空格分割行
data = line.split()
# 将数据写入CSV文件
csv_writer.writerow(data)
print("数据已保存到", save_path)
# 从CSV文件中读取IP地址并解析到Cloudflare域名下
with open(save_path, 'r', newline='', encoding='utf-8') as csvfile:
# 创建CSV读取器对象
csv_reader = csv.reader(csvfile)
# 跳过标题行(如果有的话)
next(csv_reader, None)
# 读取每一行数据
for row in csv_reader:
if row: # 检查行是否为空
ip_address = row[0] # 假设IP地址在第一列
# 请求主体
data = {
"type": "A",
"name": subdomain,
"content": ip_address,
"ttl": 1, # TTL(生存时间),以秒为单位
"proxied": False # 关闭 Cloudflare 代理
}
# 发送POST请求以创建DNS记录
response = requests.post(api_url, headers=headers, json=data)
# 检查响应状态码
if response.status_code == 200:
print(f"IP地址 {ip_address} 已成功解析到 Cloudflare 域名下")
else:
print(f"解析IP地址 {ip_address} 时出错:", response.text)
else:
print("无法从URL检索数据")
else:
print("获取DNS记录时出错:", response.text)