【问题标题】:query with different name server使用不同的名称服务器查询
【发布时间】:2026-02-14 17:25:05
【问题描述】:

我要更改域的默认名称服务器,然后获取它的 A 记录!我尝试使用以下代码,但问题是当我使用 IP 地址作为名称服务器时,一切正常,但是当我使用名称服务器名称(例如“ns1.google.com”)时,我无法运行代码并出现异常。有什么想法吗?(我使用了这里的代码:Set specific DNS server using dns.resolver (pythondns)

def NsLookupSpecificNS(domain):
    my_resolver = dns.resolver.Resolver()

    # 8.8.8.8 is Google's public DNS server
    my_resolver.nameservers = ['216.239.38.10']

    answer = my_resolver.query('google.com', 'A')
    try:
        for rdata in answer:
            print rdata
    except dns.resolver.NoAnswer:
            pass

我已经厌倦了以下内容:

def NsLookupSpecificNS(domain):
    my_resolver = dns.resolver.Resolver()

    # 8.8.8.8 is Google's public DNS server
    my_resolver.nameservers = ['ns1.google.com']

    answer = my_resolver.query('google.com', 'A')
    try:
        for rdata in answer:
            print rdata
    except dns.resolver.NoAnswer:
            pass

这是我得到的:

Traceback (most recent call last):
  File "C:\Users\My Documents\LiClipse Workspace\DNS\Lookup.py", line 49, in <module>
    NsLookupSpecificNS('google.com')
  File "C:\Users\My Documents\LiClipse Workspace\DNS\Lookup.py", line 33, in NsLookupSpecificNS
    answer = my_resolver.query('google.com', 'A')
  File "C:\Python27\lib\site-packages\dns\resolver.py", line 962, in query
    source_port=source_port)
  File "C:\Python27\lib\site-packages\dns\query.py", line 242, in udp
    if _addresses_equal(af, from_address, destination) or \
  File "C:\Python27\lib\site-packages\dns\query.py", line 169, in _addresses_equal
    n2 = dns.inet.inet_pton(af, a2[0])
  File "C:\Python27\lib\site-packages\dns\inet.py", line 51, in inet_pton
    return dns.ipv4.inet_aton(text)
  File "C:\Python27\lib\site-packages\dns\ipv4.py", line 48, in inet_aton
    raise dns.exception.SyntaxError
dns.exception.SyntaxError: Text input is malformed.

【问题讨论】:

  • 什么异常?总是提出问题完整的错误信息。有很多有用的信息。
  • dns.resolver 来自哪里?
  • @furas 我更新了问题!
  • @Stephen 我不确定!我是这个领域的新手,并从互联网上的示例中获取代码
  • 我明白了。但请尝试了解您正在尝试让其他人帮助您解决问题。关于 SO,有很多很多问题。获得快速答案的那些是最容易回答的。如果试图回答问题的人必须去寻找许多不同的东西来回答问题,他们可能会继续前进而不去打扰。因此,您可以做的越多,让您的问题更容易回答,就越有可能有人回答。 :-)

标签: python dns dnspython


【解决方案1】:

在 dnspython 中,nameservers 实例变量采用 IP 地址列表而不是域名,这就是您收到该错误的原因。您需要单独查询 ns1.google.com 的地址,并使用该地址(或多个地址)进行后续查询。当然,这引出了您在哪里进行第一次查询的问题。为此,您可以尝试使用系统解析器。

【讨论】:

    最近更新 更多