]>
Commit | Line | Data |
---|---|---|
c0e0545b PD |
1 | #!/usr/bin/env python3 |
2 | import socket | |
3 | import sys | |
4 | import threading | |
5 | import time | |
6 | ||
7 | from atomicwrites import atomic_write | |
8 | ||
9 | class LookupThread(threading.Thread): | |
10 | def run(self): | |
11 | while True: | |
12 | ips = dict() | |
13 | for target in self.targets: | |
14 | addrs = ips.get(target, []) | |
15 | ||
16 | try: | |
17 | res = socket.getaddrinfo(target, 0, proto=socket.IPPROTO_UDP) | |
18 | addrs = [item[4][0] for item in res] | |
19 | except socket.gaierror as e: | |
20 | if e.errno in (socket.EAI_NODATA, socket.EAI_NONAME): | |
21 | addrs = [] | |
22 | ||
23 | ips[target] = addrs | |
24 | ||
25 | with atomic_write(self.fname, overwrite=True) as out: | |
26 | out.write('return {\n') | |
27 | for name,addrs in ips.items(): | |
28 | out.write(' ["{}"]='.format(name) + '{\n') | |
29 | for addr in addrs: | |
30 | out.write(' "{}",\n'.format(addr)) | |
31 | out.write(' },\n') | |
32 | out.write('}\n') | |
33 | ||
34 | time.sleep(1) | |
35 | ||
36 | if __name__ == '__main__': | |
37 | lt = LookupThread() | |
38 | lt.setDaemon(True) | |
39 | lt.targets = [] | |
40 | lt.fname = '/tmp/dnsdist-resolver.out' | |
41 | lt.start() | |
42 | for line in sys.stdin: | |
43 | print(line.split()) | |
44 | lt.targets=line.split() |