summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjerome <jerome@xlinfo.fr>2025-06-28 23:51:42 +0200
committerjerome <jerome@xlinfo.fr>2025-06-28 23:51:42 +0200
commit638d8ecbb0ddb70bd444cdf1fecbe17d1e40151b (patch)
treebea8d9ceab1b6a05ca3f4c7c8bb1ef264cd66f4a
parent34b5518fa596845b557639fea86a3b59cdff5d2d (diff)
downloadpython-638d8ecbb0ddb70bd444cdf1fecbe17d1e40151b.tar.gz
python-638d8ecbb0ddb70bd444cdf1fecbe17d1e40151b.zip
dns_zone_xfer
-rw-r--r--dns_zone_xfer.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/dns_zone_xfer.py b/dns_zone_xfer.py
new file mode 100644
index 0000000..9459cc2
--- /dev/null
+++ b/dns_zone_xfer.py
@@ -0,0 +1,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")