当多个存在时,使用dnspython删除特定的dns记录

时间:2018-03-07 15:16:34

标签: dns dnspython

考虑在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页面上出现问题

2 个答案:

答案 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)