0

我正在尝试获取子域的 NS,但出现NoAnswer异常。

我怀疑这是因为请求 NS 只在根域上工作,但我该怎么办呢?

有没有办法使用它来实现它,dnspython或者我必须删除每个子部分,直到 NS 工作?

4

1 回答 1

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.

希望对其他人有所帮助。

于 2017-12-22T14:04:33.217 回答