summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Lundberg <lundberg@nordu.net>2013-10-01 12:49:02 +0200
committerJohan Lundberg <lundberg@nordu.net>2013-10-01 12:49:02 +0200
commit2cc994bad02eb6045c295007b43cf8abed4387de (patch)
treec3278b07e61d7f229fa5911f60d06546292440b3
parenta43518c2b4ecc235e39bf348482d16589f62a05e (diff)
Addresses that does not resolve to a hostname is now handled.
-rw-r--r--dnscheck_nsd.py34
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)