You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dnspython2如何创建或修改DNS A类型记录 现有实现代码不生效求助

DNS A记录增改失败修复方案

前置排查项

  • 确认依赖为最新稳定版dnspython,可执行pip install --upgrade dnspython完成安装更新
  • 确认自有DNS服务器已开启当前客户端IP的动态更新权限:BIND服务需在对应zone配置中添加allow-update { 客户端IP/32; };规则,其他DNS服务需开放对应动态更新权限,这是更新失败的高频原因
  • 确认入参格式符合要求:
    • ZONE_NAME为DNS区域名,末尾必须加.代表绝对域名,例:example.com.
    • 目标记录为主机名test.example.com时,name参数传test即可,无需拼接完整域名
    • rdtype固定传入字符串A,rdata为字符串格式的IPv4地址
  • 原代码无返回结果校验,无法定位具体错误类型

修正后的创建A记录代码

import dns.update
import dns.query
import dns.rcode

# 以下参数请替换为实际环境值
ZONE_NAME = "example.com."
DNS_SERVER_ADDRESS = "你的DNS服务器IP"
name = "目标主机名"
ttl = 300
rdtype = "A"
rdata = "目标记录IP"

try:
    update = dns.update.Update(ZONE_NAME)
    update.add(name, ttl, rdtype, rdata)
    response = dns.query.tcp(update, DNS_SERVER_ADDRESS, timeout=10)
    rcode_val = dns.rcode.from_flags(response.flags, response.ednsflags)
    if rcode_val == dns.rcode.NOERROR:
        print("A记录创建成功")
    else:
        print(f"创建失败,错误码:{dns.rcode.to_text(rcode_val)}")
except Exception as e:
    print(f"请求异常:{str(e)}")

修正后的修改A记录代码

使用replace方法的逻辑无误,若需要仅修改已存在的记录,可增加预查询校验逻辑,代码如下:

import dns.update
import dns.query
import dns.rcode
import dns.resolver

# 以下参数请替换为实际环境值
ZONE_NAME = "example.com."
DNS_SERVER_ADDRESS = "你的DNS服务器IP"
name = "目标主机名"
ttl = 300
rdtype = "A"
new_rdata = "修改后的IP地址"

try:
    # 预查询校验记录是否存在,不需要可删除该部分
    resolver = dns.resolver.Resolver()
    resolver.nameservers = [DNS_SERVER_ADDRESS]
    old_records = resolver.resolve(f"{name}.{ZONE_NAME}", rdtype)
    print(f"原记录值:{[r.address for r in old_records]}")

    update = dns.update.Update(ZONE_NAME)
    update.replace(name, ttl, rdtype, new_rdata)
    response = dns.query.tcp(update, DNS_SERVER_ADDRESS, timeout=10)
    rcode_val = dns.rcode.from_flags(response.flags, response.ednsflags)
    if rcode_val == dns.rcode.NOERROR:
        print("A记录修改成功")
    else:
        print(f"修改失败,错误码:{dns.rcode.to_text(rcode_val)}")
except dns.resolver.NXDOMAIN:
    print("待修改记录不存在,请先创建")
except Exception as e:
    print(f"操作异常:{str(e)}")

内容的提问来源于stack exchange,提问作者yAm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 01:54:04