本文目录导读:

- 使用Cloudflare API (Python脚本)
- 从CSV文件读取批量添加
- 使用Bash脚本 (cURL + Cloudflare API)
- 使用阿里云DNS API (Python)
- 使用dnspython库 (通用)
- 安装依赖
- 使用建议
我来介绍几种批量添加DNS记录的方法:
使用Cloudflare API (Python脚本)
#!/usr/bin/env python3
import os
import requests
import json
from typing import List, Dict
# 配置
CLOUDFLARE_EMAIL = "your_email@example.com"
CLOUDFLARE_API_KEY = "your_api_key"
ZONE_ID = "your_zone_id"
DOMAIN = "yourdomain.com"
headers = {
"X-Auth-Email": CLOUDFLARE_EMAIL,
"X-Auth-Key": CLOUDFLARE_API_KEY,
"Content-Type": "application/json"
}
def add_dns_record(record_type: str, name: str, content: str, ttl: int = 120, proxied: bool = False):
"""添加单个DNS记录"""
url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records"
data = {
"type": record_type,
"name": name,
"content": content,
"ttl": ttl,
"proxied": proxied
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(f"✓ 添加成功: {name}.{DOMAIN} -> {content}")
return True
else:
print(f"✗ 添加失败: {name}.{DOMAIN} - {response.json()['errors']}")
return False
def batch_add_records(records: List[Dict]):
"""批量添加DNS记录"""
success_count = 0
fail_count = 0
for record in records:
if add_dns_record(**record):
success_count += 1
else:
fail_count += 1
print(f"\n批量添加完成: 成功 {success_count}, 失败 {fail_count}")
# 示例数据 - 从CSV文件或数组读取
records_to_add = [
{"record_type": "A", "name": "www", "content": "1.2.3.4", "ttl": 120},
{"record_type": "A", "name": "api", "content": "1.2.3.5", "ttl": 120},
{"record_type": "CNAME", "name": "blog", "content": "blog.example.com", "ttl": 300},
{"record_type": "MX", "name": "@", "content": "mail.example.com", "ttl": 300},
{"record_type": "TXT", "name": "@", "content": "v=spf1 include:_spf.example.com ~all", "ttl": 300}
]
if __name__ == "__main__":
batch_add_records(records_to_add)
从CSV文件读取批量添加
#!/usr/bin/env python3
import csv
import requests
def import_from_csv(csv_file: str):
"""从CSV文件导入DNS记录"""
with open(csv_file, 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
records = list(reader)
batch_add_records(records)
# CSV文件格式示例 (dns_records.csv):
# type,name,content,ttl,proxied
# A,www,1.2.3.4,120,false
# CNAME,blog,blog.example.com,300,false
# MX,@,mail.example.com,300,false
if __name__ == "__main__":
import_from_csv("dns_records.csv")
使用Bash脚本 (cURL + Cloudflare API)
#!/bin/bash
# 配置
CLOUDFLARE_EMAIL="your_email@example.com"
CLOUDFLARE_API_KEY="your_api_key"
ZONE_ID="your_zone_id"
DOMAIN="yourdomain.com"
# 批量添加函数
add_dns_record() {
local TYPE=$1
local NAME=$2
local CONTENT=$3
local TTL=${4:-120}
local PROXIED=${5:-false}
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
-H "X-Auth-Email: $CLOUDFLARE_EMAIL" \
-H "X-Auth-Key: $CLOUDFLARE_API_KEY" \
-H "Content-Type: application/json" \
--data "{
\"type\": \"$TYPE\",
\"name\": \"$NAME\",
\"content\": \"$CONTENT\",
\"ttl\": $TTL,
\"proxied\": $PROXIED
}"
echo "添加记录: $NAME.$DOMAIN -> $CONTENT"
}
# 从文件读取记录并批量添加
while IFS=',' read -r TYPE NAME CONTENT TTL PROXIED; do
# 跳过标题行
if [ "$TYPE" != "type" ]; then
add_dns_record "$TYPE" "$NAME" "$CONTENT" "$TTL" "$PROXIED"
fi
done < "dns_records.csv"
使用阿里云DNS API (Python)
#!/usr/bin/env python3
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109 import AddDomainRecordRequest
import json
# 配置阿里云
ACCESS_KEY_ID = "your_access_key_id"
ACCESS_KEY_SECRET = "your_access_key_secret"
DOMAIN = "yourdomain.com"
client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, 'cn-hangzhou')
def add_aliyun_dns_record(record_type: str, rr: str, value: str, ttl: int = 600):
"""添加阿里云DNS记录"""
request = AddDomainRecordRequest.AddDomainRecordRequest()
request.set_DomainName(DOMAIN)
request.set_Type(record_type)
request.set_RR(rr)
request.set_Value(value)
request.set_TTL(ttl)
try:
response = client.do_action_with_exception(request)
result = json.loads(response)
print(f"✓ 添加成功: {rr}.{DOMAIN} -> {value}")
return True
except Exception as e:
print(f"✗ 添加失败: {rr}.{DOMAIN} - {e}")
return False
# 批量添加
records = [
("A", "www", "1.2.3.4"),
("A", "api", "1.2.3.5"),
("CNAME", "blog", "blog.example.com")
]
for record_type, rr, value in records:
add_aliyun_dns_record(record_type, rr, value)
使用dnspython库 (通用)
#!/usr/bin/env python3
import dns.resolver
import dns.update
import dns.query
import dns.tsigkeyring
# 配置DNS服务器
DNS_SERVER = "ns1.yourdomain.com"
ZONE = "yourdomain.com"
KEY_NAME = "your-key-name"
KEY_SECRET = "your-key-secret"
# 创建TSIG密钥
keyring = dns.tsigkeyring.from_text({
KEY_NAME: KEY_SECRET
})
def add_record_via_nsupdate(record_type: str, name: str, content: str, ttl: int = 300):
"""使用nsupdate方式添加记录"""
update = dns.update.Update(ZONE, keyring=keyring)
if record_type == "A":
update.add(name, ttl, 'A', content)
elif record_type == "CNAME":
update.add(name, ttl, 'CNAME', content)
elif record_type == "MX":
update.add(name, ttl, 'MX', content)
elif record_type == "TXT":
update.add(name, ttl, 'TXT', content)
response = dns.query.tcp(update, DNS_SERVER)
if response.rcode() == 0:
print(f"✓ 添加成功: {name}.{ZONE} -> {content}")
return True
else:
print(f"✗ 添加失败: {name}.{ZONE}")
return False
# 批量添加
records = [
("A", "www", "1.2.3.4"),
("A", "api", "1.2.3.5"),
("CNAME", "blog", "blog.example.com")
]
for record_type, name, content in records:
add_record_via_nsupdate(record_type, name, content)
安装依赖
# Cloudflare API pip install requests # 阿里云SDK pip install aliyun-python-sdk-core pip install aliyun-python-sdk-alidns # dnspython pip install dnspython
使用建议
- 记录格式建议:使用CSV文件管理记录,便于维护
- 错误处理:添加重试机制和日志记录
- 验证结果:添加后执行DNS查询验证
- 速率限制:注意API调用限制,添加延时
- 备份:批量操作前备份原有DNS记录
选择哪种方式取决于你的域名注册商和DNS提供商,Cloudflare和阿里云提供了最完善的API支持。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播