我正在尝试获取子域的 NS,但出现NoAnswer
异常。
我怀疑这是因为请求 NS 只在根域上工作,但我该怎么办呢?
有没有办法使用它来实现它,dnspython
或者我必须删除每个子部分,直到 NS 工作?
我正在尝试获取子域的 NS,但出现NoAnswer
异常。
我怀疑这是因为请求 NS 只在根域上工作,但我该怎么办呢?
有没有办法使用它来实现它,dnspython
或者我必须删除每个子部分,直到 NS 工作?
这是我对自己问题的回答。我最终决定爬上梯子,删除域的每个子部分,直到最后一个点(保留最后两个部分)。
这是代码:
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.
希望对其他人有所帮助。