/usr/share/doc/python3-dns/examples/caching.py is in python3-dns 3.0.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #
# From: KevinL <darius@bofh.net.au>
# 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 name in cache:
# 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]
|