1

ドメインのデフォルト ネーム サーバーを変更し、その 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.
4

1 に答える 1

4

dnspython では、nameservers インスタンス変数はドメイン名ではなく IP アドレスのリストを取得するため、そのエラーが発生します。ns1.google.com のアドレスを個別にクエリし、そのアドレス (複数可) を後続のクエリに使用する必要があります。もちろん、最初のクエリをどこで作成するかという問題が生じます。そのために、システムリゾルバを使用してみることができます。

于 2017-01-09T02:48:35.057 に答える