当存在多个时,使用 dnspython 删除特定的 dns 记录
Delete specific dns record with dnspython when multiple are present
考虑 DNS 服务器中的以下记录:
;; ANSWER SECTION:
test.example.com 3600 IN TXT "line1"
test.example.com 3600 IN TXT "line2"
是否可以删除其中一条记录而保留另一条记录?
执行删除时:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
update.present(name, rdata)
update.delete(name, rdata)
我收到 NXRRSET (8) 响应。
删除时:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
update.present(name, datatype)
update.delete(name, datatype)
然后两条 TXT 记录都被删除(如预期的那样)。
我的示例是针对 TXT 记录的,但对于 A 和 PTR 等其他数据类型我也有同样的问题。删除相同名称和类型的多条记录中的 1 条似乎不起作用。
有什么建议吗?或者这是不可能的?
更新
当使用 nsupdate cli 工具时,这似乎是可能的。当我发送以下命令时,仅删除了 2 个条目中的 1 个:
$ nsupdate -v -k example.com.key
server ns.example.com
nupdate delete test.example.com. TXT line1
send
因为它适用于 dns 更新,我会在 dnspython github 页面
上提出问题
问题似乎出在现在的从句上。由于存在 2 条记录并且 update.present 仅包含 1 条记录,因此 NXRRSET 失败。
省略 prsent 子句时,删除有效:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
update.delete(name, rdata)
在使用 nsupdate 进行更多测试后,解决方案变得清晰了。使用 present prereq 时,我只需要将它们全部添加,以满足 prereq。以下代码使用 present 并且仅删除 "line1" txt 记录:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
rdata2 = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line2")
update.present(name, rdata)
update.present(name, rdata2)
update.delete(name, rdata)
考虑 DNS 服务器中的以下记录:
;; ANSWER SECTION:
test.example.com 3600 IN TXT "line1"
test.example.com 3600 IN TXT "line2"
是否可以删除其中一条记录而保留另一条记录?
执行删除时:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
update.present(name, rdata)
update.delete(name, rdata)
我收到 NXRRSET (8) 响应。
删除时:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
update.present(name, datatype)
update.delete(name, datatype)
然后两条 TXT 记录都被删除(如预期的那样)。
我的示例是针对 TXT 记录的,但对于 A 和 PTR 等其他数据类型我也有同样的问题。删除相同名称和类型的多条记录中的 1 条似乎不起作用。
有什么建议吗?或者这是不可能的?
更新
当使用 nsupdate cli 工具时,这似乎是可能的。当我发送以下命令时,仅删除了 2 个条目中的 1 个:
$ nsupdate -v -k example.com.key
server ns.example.com
nupdate delete test.example.com. TXT line1
send
因为它适用于 dns 更新,我会在 dnspython github 页面
上提出问题问题似乎出在现在的从句上。由于存在 2 条记录并且 update.present 仅包含 1 条记录,因此 NXRRSET 失败。 省略 prsent 子句时,删除有效:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
update.delete(name, rdata)
在使用 nsupdate 进行更多测试后,解决方案变得清晰了。使用 present prereq 时,我只需要将它们全部添加,以满足 prereq。以下代码使用 present 并且仅删除 "line1" txt 记录:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
rdata2 = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line2")
update.present(name, rdata)
update.present(name, rdata2)
update.delete(name, rdata)