# # From: KevinL # A simple dns answer cache - it's author notes: # "It's probably really bodgy code, tho - it was my early python..." # So don't send him abusive messages if you hate it. # class DNSCache: """ Covers the DNS object, keeps a cache of answers. Clumsy as hell. """ forCache = {} revCache = {} # cache failures for this long, in seconds negCache = 3600 def __init__(self): import DNS DNS.ParseResolvConf() def lookup(self,IP = None,name = None): import DNS now = time.time() if (not IP) and (not name): return None if IP: if type(IP) != type(''): return None a = string.split(IP, '.') a.reverse() name = string.join(a, '.')+'.in-addr.arpa' cache = self.revCache qt = 'ptr' else: if type(name) != type(''): return None cache = self.forCache qt = 'a' if cache.has_key(name): # Check if it's timed out or not if cache[name][1] < now: del(cache[name]) else: return(cache[name][0]) x = DNS.DnsRequest(name,qtype=qt) try: x.req() except: return 'Timeout' if len(x.response.answers) > 0: cache[name] = ( x.response.answers[0]['data'], x.time_finish + x.response.answers[0]['ttl']) else: cache[name] = (None,now+self.negCache) return cache[name][0]