我试图获得子域名的NS,但我得到NoAnswer
例外。
我怀疑它是因为要求NS只在根域工作,但我该怎么办?
有没有办法使用dnspython
来实现它,或者我必须删除每个子部分,直到NS工作?
答案 0 :(得分:0)
这是我对自己问题的回答。我最终决定走上阶梯,将域的每个子部分移到最后一个点(保留最后两个部分)。
以下是代码:
def ns_lookup(domain):
parts = domain.split('.')
lookup = resolver.Resolver()
lookup.timeout = 3
ns_ips = None
while len(parts) >= 2:
try:
nameservers = [a.to_text() for a in lookup.query('.'.join(parts), 'NS')]
ns_ips = [resolver.query(ns)[0].to_text() for ns in nameservers]
if len(ns_ips) > 0:
return ns_ips
except exception.Timeout:
return []
except (resolver.NoAnswer, resolver.NXDOMAIN, resolver.NoNameservers):
pass
parts.pop(0)
return False
它的工作原理如下:
ns_ips = ns_lookup(domain)
if ns_ips is False:
return False
if len(ns_ips) == 0:
return []
lookup = resolver.Resolver(configure=False)
lookup.timeout = 3
lookup.nameservers = ns_ips
lookup.query(domain, 'A') # The entry you want.
希望能帮助其他人。