]> git.ipfire.org Git - thirdparty/pdns.git/blame - contrib/DNSDistLogActionReader.py
take lmdb change from bf2b8dc94331b50bd839dc8f5b188664637c7b31
[thirdparty/pdns.git] / contrib / DNSDistLogActionReader.py
CommitLineData
320b20cd
RG
1#!/usr/bin/env python
2
3import socket
4import struct
5import sys
6
7def readRecord(fp, withTimestamp):
8
9 if withTimestamp:
10 data = fp.read(12)
11 if not data:
12 return False
13 tv_sec, tv_nsec = struct.unpack("QI", data)
14
15 data = fp.read(2)
16 if not data:
17 return False
18
19 queryID = struct.unpack("!H", data)[0]
20 qname = ''
21 while True:
22 labelLen = struct.unpack("B", fp.read(1))[0]
23 if labelLen == 0:
24 break
25 label = fp.read(labelLen)
26 if qname != '':
27 qname = qname + '.'
28 qname = qname + label.decode()
29
30 qtype = struct.unpack("H", fp.read(2))[0]
31 addrType = struct.unpack("H", fp.read(2))[0]
32 addr = None
33 if addrType == socket.AF_INET:
34 addr = socket.inet_ntop(socket.AF_INET, fp.read(4))
35 elif addrType == socket.AF_INET6:
36 addr = socket.inet_ntop(socket.AF_INET6, fp.read(16))
37 else:
38 print('Unsupported address type %d, skipping this record' % (int(addrType)))
39 return False
40 port = struct.unpack("!H", fp.read(2))[0]
41
42 if withTimestamp:
43 print('[%u.%u] Packet from %s:%d for %s %s with id %d' % (tv_sec, tv_nsec, addr, port, qname, qtype, queryID))
44 else:
45 print('Packet from %s:%d for %s %s with id %d' % (addr, port, qname, qtype, queryID))
46
47 return True
48
49def readLogFile(filename, withTimestamps):
50 with open(filename, mode='rb') as fp:
51 while True:
52 if not readRecord(fp, withTimestamps):
53 break
54
55if __name__ == "__main__":
56 if len(sys.argv) != 2 and (len(sys.argv) != 3 or sys.argv[2] != 'with-timestamps'):
57 sys.exit('Usage: %s <path to log file> [with-timestamps]' % (sys.argv[0]))
58
59 readLogFile(sys.argv[1], len(sys.argv) == 3)
60
61 sys.exit(0)