summaryrefslogtreecommitdiff
path: root/dns_zone_xfer.py
blob: 9459cc217e40eca6ee410cb9cbec19c8adc0041c (plain)
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
#!/bin/python3
import dns.resolver
import dns.zone

def dns_zone_xfer(address):
    ns_answer = dns.resolver.resolve(address, 'NS')
    for server in ns_answer:
        print("[*] Found NS: {}".format(server))
        ip_answer = dns.resolver.resolve(server.target, 'A')
        for ip in ip_answer:
            print("[*] IP for {} is {}".format(server, ip))
            try:
                zone = dns.zone.from_xfr(dns.query.xfr(str(ip), address))   
                hosts = zone.nodes.keys()                                   # a node is a set of rdatasets
                for host in hosts:
                    print(zone[host].to_text(host))                         # convert a node to text format
            except dns.xfr.TransferError:
                print("[*] NS {} refused zone transfer !".format(server))
                continue
            except dns.exception.FormError:
                print("No answer or RRset for {}".format(address))
                continue

#dns_zone_xfer('megacorpone.com')
if __name__ == "__main__":
    import sys
    try:
        dns_zone_xfer(sys.argv[1])
    except IndexError:
        print(f"{sys.argv[0]} demande un nom de domaine en argument")