diff options
-rw-r--r-- | dnscheck_nsd.py | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/dnscheck_nsd.py b/dnscheck_nsd.py index c2b10ed..d911622 100644 --- a/dnscheck_nsd.py +++ b/dnscheck_nsd.py @@ -18,12 +18,20 @@ logger.addHandler(ch) VERBOSE = False +def get_hostname(addr): + hostname = addr + try: + return gethostbyaddr(addr)[0] + except herror: + logger.error('No hostname could be found for %s.' % addr) + return hostname + def get_resolver(nameserver=None, lifetime=30): resolver = dns.resolver.Resolver() resolver.lifetime = lifetime if nameserver: try: - resolver.nameservers=[gethostbyname(nameserver)] + resolver.nameservers = [gethostbyname(nameserver)] except gaierror: try: resolver.nameservers = [nameserver] # It is an IP address @@ -44,17 +52,17 @@ def compare_soa(zone, resolvers): logger.info('NS %s: %s' % (resolver.nameservers[0], answer)) else: try: - logger.info('NS %s: %s' % (gethostbyaddr(resolver.nameservers[0])[0], answer)) + logger.info('NS %s: %s' % (get_hostname(resolver.nameservers[0]), answer)) except herror: logger.info('NS %s: %s' % (resolver.nameservers[0], answer)) except dns.exception.Timeout: - logger.error('%s timed out. SOA request for %s failed.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('%s timed out. SOA request for %s failed.' % (get_hostname(resolver.nameservers[0]), zone)) return 'timeout' except dns.resolver.NoAnswer: - logger.error('%s returned no answer for %s.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('%s returned no answer for %s.' % (get_hostname(resolver.nameservers[0]), zone)) return None except dns.resolver.NXDOMAIN: - logger.error('NS %s responded domain not found (NXDOMAIN) for %s.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('NS %s responded domain not found (NXDOMAIN) for %s.' % (get_hostname(resolver.nameservers[0]), zone)) return None except dns.resolver.NoNameservers: logger.error('No non-broken nameservers are available to answer the query for %s.' % zone) @@ -73,20 +81,20 @@ def print_soa(zone, resolvers): if resolver.nameservers[0] == '127.0.0.1' or resolver.nameservers[0] == '::1': print 'NS %s: %s' % (resolver.nameservers[0], answer) else: - print 'NS %s: %s' % (gethostbyaddr(resolver.nameservers[0])[0], answer) + print 'NS %s: %s' % (get_hostname(resolver.nameservers[0]), answer) except dns.exception.Timeout: - print '%s timed out. SOA request for %s failed.' % (gethostbyaddr(resolver.nameservers[0])[0], zone) + print '%s timed out. SOA request for %s failed.' % (get_hostname(resolver.nameservers[0]), zone) except dns.resolver.NoAnswer: - logger.error('%s returned no answer for %s.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('%s returned no answer for %s.' % (get_hostname(resolver.nameservers[0]), zone)) except dns.resolver.NXDOMAIN: - logger.error('NS %s responded domain not found (NXDOMAIN) for %s.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('NS %s responded domain not found (NXDOMAIN) for %s.' % (get_hostname(resolver.nameservers[0]), zone)) except dns.resolver.NoNameservers: logger.error('No non-broken nameservers are available to answer the query for %s.' % zone) def check_auth(zone, resolver): try: - nameserver = gethostbyaddr(resolver.nameservers[0])[0] + nameserver = get_hostname(resolver.nameservers[0]) answer = resolver.query(zone, 'NS') if VERBOSE: logger.info('Checking if NS %s authoritative for %s...' % (nameserver, zone)) @@ -97,13 +105,13 @@ def check_auth(zone, resolver): logger.info('NS %s is authoritative for %s...' % (nameserver, zone)) return True except dns.exception.Timeout: - logger.error('%s timed out. NS request for %s failed.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('%s timed out. NS request for %s failed.' % (get_hostname(resolver.nameservers[0]), zone)) return None except dns.resolver.NoAnswer: - logger.error('%s returned no answer for %s.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('%s returned no answer for %s.' % (get_hostname(resolver.nameservers[0]), zone)) return None except dns.resolver.NXDOMAIN: - logger.error('NS %s responded domain not found (NXDOMAIN) for %s.' % (gethostbyaddr(resolver.nameservers[0])[0], zone)) + logger.error('NS %s responded domain not found (NXDOMAIN) for %s.' % (get_hostname(resolver.nameservers[0]), zone)) return None except dns.resolver.NoNameservers: logger.error('No non-broken nameservers are available to answer the query for %s.' % zone) |