1

少し問題があり、頭が動かないようです。サブドメインのシリアル番号を照会しようとしています。応答エラーが発生し続けますが、ルート ドメインでは問題なく動作します。私があなたに示すだけならもっと簡単です:

import socket, dns.resolver
host = "google.com"
querytype = "SOA"
cachingserverslist = {'server1': '4.1.1.1', 'server2': '4.2.2.2'}

for cachingservername, cachingserver in sorted(cachingserverslist.iteritems()) :
    query = dns.resolver.Resolver()
    query.nameservers=[socket.gethostbyname(cachingserver)]
    query.Timeout = 2.0

for a in query.query( host , querytype ) :
      print a.serial

これにより、期待される結果が得られます。私が理解していないのは、ホスト変数をサブドメインまたは www に変更すると、応答なしでエラーになることです。これは、私が何を意味するかを示す ipython セッションです。

In [1]: import socket, dns.resolver
In [2]: host = "google.com"
In [3]: querytype = "SOA"
In [4]: cachingserverslist = {'server1': '4.1.1.1', 'server2': '4.2.2.2'}
In [5]: for cachingservername, cachingserver in sorted(cachingserverslist.iteritems())     :
...:             query = dns.resolver.Resolver()
...:         query.nameservers=[socket.gethostbyname(cachingserver)]
...:         query.Timeout = 2.0
...: 

In [6]: for a in query.query( host , querytype ) :
   ...:               print a.serial
   ...: 
2011121901

In [7]:
In [8]: host = "www.google.com"
In [9]: for a in query.query( host , querytype ) :
      print a.serial
   ....:     
   ....:     
---------------------------------------------------------------------------
NoAnswer                                  Traceback (most recent call last)

/var/www/pydns/<ipython console> in <module>()

/usr/local/lib/python2.6/dist-packages/dns/resolver.pyc in query(self, qname, rdtype,     rdclass, tcp, source, raise_on_no_answer)
707             raise NXDOMAIN
708         answer = Answer(qname, rdtype, rdclass, response,
--> 709                         raise_on_no_answer)
710         if self.cache:
711             self.cache.put((qname, rdtype, rdclass), answer)

/usr/local/lib/python2.6/dist-packages/dns/resolver.pyc in __init__(self, qname, rdtype, rdclass, response, raise_on_no_answer)
    127                     except KeyError:
    128                         if raise_on_no_answer:
--> 129                             raise NoAnswer
    130                 if raise_on_no_answer:
    131                     raise NoAnswer

    NoAnswer: 

どんな洞察でも大歓迎です。ありがとう。

4

1 に答える 1