File: reverse.py

package info (click to toggle)
dnspython 2.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,448 kB
  • sloc: python: 34,885; sh: 7; makefile: 4
file content (40 lines) | stat: -rwxr-xr-x 1,390 bytes parent folder | download
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
#!/usr/bin/env python3

# Usage: reverse.py <zone_filename>...
#
# This demo script will load in all of the zones specified by the
# filenames on the command line, find all the A RRs in them, and
# construct a reverse mapping table that maps each IP address used to
# the list of names mapping to that address.  The table is then sorted
# nicely and printed.
#
# Note!  The zone name is taken from the basename of the filename, so
# you must use filenames like "/wherever/you/like/dnspython.org" and
# not something like "/wherever/you/like/foo.db" (unless you're
# working with the ".db" GTLD, of course :)).
#
# If this weren't a demo script, there'd be a way of specifying the
# origin for each zone instead of constructing it from the filename.

import os.path
import sys
from typing import Dict, List  # pylint: disable=unused-import

import dns.ipv4
import dns.zone

reverse_map = {}  # type: Dict[str, List[str]]

for filename in sys.argv[1:]:
    zone = dns.zone.from_file(filename, os.path.basename(filename), relativize=False)
    for name, ttl, rdata in zone.iterate_rdatas("A"):
        print(type(rdata))
        try:
            reverse_map[rdata.address].append(name.to_text())
        except KeyError:
            reverse_map[rdata.address] = [name.to_text()]

for k in sorted(reverse_map.keys(), key=dns.ipv4.inet_aton):
    v = reverse_map[k]
    v.sort()
    print(k, v)