Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import dns.resolver
- import dns.name
- import dns.query
- import dns.message
- import pandas as pd
- def get_glue_records(domain):
- print(' Getting Glue Records...')
- glue_records = []
- try:
- # Get the TLD
- tld = domain.split('.')[-1]
- tld_domain = dns.name.from_text(tld + '.')
- # Query root servers for TLD NS records
- root_servers = ['198.41.0.4', '170.247.170.2', '192.33.4.12', '199.7.91.13', '192.203.230.10', '192.5.5.241', '192.112.36.4', '198.97.190.53', '192.36.148.17', '192.58.128.30', '193.0.14.129', '199.7.83.42', '202.12.27.33']
- tld_ns = []
- for root_ip in root_servers:
- try:
- query = dns.message.make_query(tld_domain, dns.rdatatype.NS)
- response = dns.query.udp(query, root_ip, timeout=5)
- if response.answer or response.authority:
- ns_rrset = response.authority[0] if response.authority else response.answer[0]
- tld_ns = [str(rdata.target).rstrip('.') for rdata in ns_rrset]
- break
- except Exception:
- continue
- # Query TLD servers for domain NS records (glue)
- for ns in tld_ns:
- try:
- ns_ip = dns.resolver.resolve(ns, 'A')[0].to_text()
- query = dns.message.make_query(domain, dns.rdatatype.NS)
- response = dns.query.udp(query, ns_ip, timeout=5)
- ns_rrset = response.authority[0] if response.authority else response.answer[0]
- glue_records = [str(rdata.target).rstrip('.') for rdata in ns_rrset]
- glue_records.sort()
- break
- except Exception:
- continue
- except Exception as e:
- print(f" Error getting glue records: {e}")
- return glue_records
- def get_ns_records(domain):
- print(' Getting NS Records...')
- try:
- answers = dns.resolver.resolve(domain, dns.rdatatype.NS, lifetime=5)
- ns_records = [str(rdata.target).rstrip('.') for rdata in answers]
- ns_records.sort()
- return ns_records
- except Exception as e:
- print(f" Error getting NS records: {e}")
- return []
- def compare_dns(domain):
- print(domain)
- glue = get_glue_records(domain)
- ns = get_ns_records(domain)
- return {
- 'Domain': domain,
- 'Glue Records': glue,
- 'NS Records': ns,
- 'Match': set(glue) == set(ns)
- }
- # Load domains
- domains = pd.read_csv('domains.csv', header=None)[0].tolist()
- results = [compare_dns(domain) for domain in domains]
- # Save results
- df = pd.DataFrame(results)
- df.to_csv('dns_comparison_report.csv', index=False)
- print("Report saved to dns_comparison_report.csv")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement