考虑在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)也有同样的问题。删除同一名称和类型的多个记录中的一个似乎不起作用。
有什么建议吗?或者这不可能吗?
更新
使用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页面上出现问题
答案 0 :(得分:1)
使用nsupdate进行更多测试后,解决方案变得清晰。当使用当前的先决条件时,我只需要将它们全部添加,以便preq得到满足。以下代码使用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)
答案 1 :(得分:0)
问题似乎是现在的条款。由于存在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)