1

I have a little issue I cannot seem to get my head get around. I am trying to query the serial number of a sub-domain. I keep getting no answer error tho but it will work fine on root domains. Easier if I just show you:

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

Which gives me the expected result. What I don't understand is when I change the host variable to any subdomain or www's it errors out with a no answer. Here is an ipython session which shows what I mean:

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: 

Any insight would be most appreciated. Thanks.

Voorhees
  • 11
  • 3

1 Answers1

1

The serial number is an attribute of the SOA 'start of authority' record. www.google.com is a CNAME, so it doesn't have a serial number associated with it.

Vortura
  • 1,315
  • 15
  • 15