]>
Commit | Line | Data |
---|---|---|
320b20cd RG |
1 | #!/usr/bin/env python |
2 | ||
3 | import socket | |
4 | import struct | |
5 | import sys | |
6 | ||
7 | def 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 | ||
49 | def readLogFile(filename, withTimestamps): | |
50 | with open(filename, mode='rb') as fp: | |
51 | while True: | |
52 | if not readRecord(fp, withTimestamps): | |
53 | break | |
54 | ||
55 | if __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) |