9

このシナリオを考えてみましょう: nsupdate を使用すると、次の方法を使用して A レコードから IP を削除できます。

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

これは、dnspython を使用した単純な実装です。ここで、bind_host はバインド サーバー、domain_name は「mydomain.com」です。sub_domain は「test-record」、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
4

1 に答える 1

4

への引数Update.delete()が間違っています - 2 番目の引数はRdatasetRdata、または rdtype (Rdatatypeまたは文字列) である必要があります。

2 番目の引数として文字列を渡すため、rdtype として扱われるため、'A'2 番目の引数として を渡す必要があります。rdtype の後にさらに引数を渡す場合、IP を渡すことは機能するはずですが、他に何が許可されているかは 100% わかりません。TTLを渡すことはうまくいかないと思います。

于 2018-10-26T07:10:49.253 に答える