cla** lookup(Thread):
def __init__(self, in_q, out_q, domain, wildcard = False, resolver_list = []):
Thread.__init__(self)
self.in_q = in_q
self.out_q = out_q
self.domain = domain
self.wildcard = wildcard
self.resolver_list = resolver_list
self.resolver = dns.resolver.Resolver()
if len(self.resolver.nameservers):
self.backup_resolver = self.resolver.nameservers
else:
#we must have a resolver, and this is the default resolver on my system...
self.backup_resolver = ['127.0.0.1']
if len(self.resolver_list):
self.resolver.nameservers = self.resolver_list
def check(self, host):
slept = 0
while True:
try:
answer = self.resolver.query(host)
if answer:
return str(answer[0])
else:
return False
except Exception as e:
if type(e) == dns.resolver.NXDOMAIN:
return False
elif type(e) == dns.resolver.NoAnswer or type(e) == dns.resolver.Timeout:
if slept == 4:
if self.resolver.nameservers == self.backup_resolver:
self.resolver.nameservers = self.resolver_list
else:
self.resolver.nameservers = self.backup_resolver
elif slept > 5:
self.resolver.nameservers = self.resolver_list
return False
time.sleep(1)
slept += 1
elif type(e) == IndexError:
pa**
else:
raise e