dnspython3从A记录中删除主机

时间:2018-10-23 14:18:26

标签: python-3.x dnspython

考虑这种情况:使用nsupdate,我可以使用以下方法从A记录中删除IP:

update delete test-record.mydomain.com 60 A 172.16.1.4

这是我使用dnspython的幼稚实现,其中bind_host是我们的绑定服务器,domain_name是“ mydomain.com”。而sub_domain是“测试记录”,ip是“ 172.16.1.4”。

def delete_dns_record(self, bind_host, domain_name, sub_domain, ip):
    update = dns.update.Update(domain_name)
    update.delete(sub_domain, '60', 'A', ip)
    response = dns.query.tcp(update, bind_host, timeout=10)
    return response

运行函数将引发以下错误:

Traceback (most recent call last):
File "dns_magic/check.py", line 136, in <module>
dnstest()
File "dns_magic/check.py", line 134, in dnstest
print(hc.delete_dns_record('1.2.3.4', 'mydomain.com.', 'test-record', '172.16.1.4' ))
File "dns_magic/check.py", line 106, in delete_dns_record
update.delete(sub_domain, '60', 'A', ip)
File "dns_magic/lib/python3.6/site-packages/dns/update.py", line 160, in delete
rdtype = dns.rdatatype.from_text(rdtype)
File "dns_magic/lib/python3.6/site-packages/dns/rdatatype.py", line 214, in from_text
raise UnknownRdatatype
dns.rdatatype.UnknownRdatatype: DNS resource record type is unknown.

任何想法如何继续?我也愿意使用Python替代方法。

更新有效的解决方案:

def delete_dns_record(bind_host, domain_name, sub_domain, ip):
    update = dns.update.Update(domain_name)
    update.delete(sub_domain, dns.rdatatype.A, ip)
    response = dns.query.tcp(update, bind_host, timeout=10)
    return response

1 个答案:

答案 0 :(得分:4)

您对Update.delete()的参数是错误的-第二个参数应为RdatasetRdata或rdtype(Rdatatype或字符串)。

由于您将字符串作为第二个参数传递,因此将其视为rdtype-因此,您应将'A'作为第二个参数传递。如果您在rdtype之后传递更多参数,则传递IP应该可以,但是我不确定100%是否允许其他参数;我猜想通过TTL无效。