Skip to content

Instantly share code, notes, and snippets.

@wheelerlaw
Created May 30, 2019 07:57
Show Gist options
  • Save wheelerlaw/56106e6ed9c2ad3e9c44d761325d3f0d to your computer and use it in GitHub Desktop.
Save wheelerlaw/56106e6ed9c2ad3e9c44d761325d3f0d to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# from dns import resolver, rdatatype
import dns, dns.resolver, dns.message, dns.query, dns.flags
import sys
import itertools
import socket
if len(sys.argv) < 2:
quit()
name_parts = str(sys.argv[1]).split('.')
if name_parts[-1] is not '':
name_parts.append('')
res = dns.resolver.Resolver()
name = '.'.join(name_parts[1:])
test = socket.gethostbyname(name)
answer = res.query(name, dns.rdatatype.NS)
name = '.'.join(name_parts)
for record in answer:
auth_ns_name = str(record)
test = socket.gethostbyname(auth_ns_name)
auth_ns_ips = [str(ip) for ip in itertools.chain(res.query(auth_ns_name, dns.rdatatype.A), res.query(auth_ns_name, dns.rdatatype.AAAA))]
query = dns.message.make_query(name, dns.rdatatype.NS)
for auth_ns_ip in auth_ns_ips:
response = dns.query.udp(query, auth_ns_ip, timeout=5)
if response.flags & dns.flags.TC:
response = dns.query.tcp(query, auth_ns_ip)
# res.nameservers = [root_ip for root_name in res.query(".", dns.rdatatype.NS) for root_ip in res.query(str(root_name))]
for i in range(2, len(name_parts)+1):
# for record_type in record_types:
name = '.'.join(name_parts[-i:])
query = dns.message.make_query(name, dns.rdatatype.NS)
response = dns.query.udp(query, res.nameservers[0])
answer = res.query(name, dns.rdatatype.NS, raise_on_no_answer=False)
res.nameservers = []
for rdata in answer:
print (rdata)
dns_ips = [str(dns_ip) for dns_ip in res.query(str(rdata))]
res.nameservers.extend(dns_ips)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment