Advertisement
Guest User

Checking NameServer Records

a guest
May 29th, 2025
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.75 KB | Source Code | 0 0
  1. import dns.resolver
  2. import dns.name
  3. import dns.query
  4. import dns.message
  5. import pandas as pd
  6.  
  7. def get_glue_records(domain):
  8.     print('    Getting Glue Records...')
  9.     glue_records = []
  10.     try:
  11.         # Get the TLD
  12.         tld = domain.split('.')[-1]
  13.         tld_domain = dns.name.from_text(tld + '.')
  14.  
  15.         # Query root servers for TLD NS records
  16.         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']
  17.        
  18.         tld_ns = []
  19.         for root_ip in root_servers:
  20.             try:
  21.                 query = dns.message.make_query(tld_domain, dns.rdatatype.NS)
  22.                 response = dns.query.udp(query, root_ip, timeout=5)
  23.                 if response.answer or response.authority:
  24.                     ns_rrset = response.authority[0] if response.authority else response.answer[0]
  25.                     tld_ns = [str(rdata.target).rstrip('.') for rdata in ns_rrset]
  26.                     break
  27.             except Exception:
  28.                 continue
  29.  
  30.         # Query TLD servers for domain NS records (glue)
  31.         for ns in tld_ns:
  32.             try:
  33.                 ns_ip = dns.resolver.resolve(ns, 'A')[0].to_text()
  34.                 query = dns.message.make_query(domain, dns.rdatatype.NS)
  35.                 response = dns.query.udp(query, ns_ip, timeout=5)
  36.                 ns_rrset = response.authority[0] if response.authority else response.answer[0]
  37.                 glue_records = [str(rdata.target).rstrip('.') for rdata in ns_rrset]
  38.                 glue_records.sort()
  39.                 break
  40.             except Exception:
  41.                 continue
  42.     except Exception as e:
  43.         print(f"    Error getting glue records: {e}")
  44.     return glue_records
  45.  
  46. def get_ns_records(domain):
  47.     print('    Getting NS Records...')
  48.     try:
  49.         answers = dns.resolver.resolve(domain, dns.rdatatype.NS, lifetime=5)
  50.         ns_records = [str(rdata.target).rstrip('.') for rdata in answers]
  51.         ns_records.sort()
  52.         return ns_records
  53.     except Exception as e:
  54.         print(f"    Error getting NS records: {e}")
  55.         return []
  56.  
  57. def compare_dns(domain):
  58.     print(domain)
  59.     glue = get_glue_records(domain)
  60.     ns = get_ns_records(domain)
  61.     return {
  62.         'Domain': domain,
  63.         'Glue Records': glue,
  64.         'NS Records': ns,
  65.         'Match': set(glue) == set(ns)
  66.     }
  67.  
  68. # Load domains
  69. domains = pd.read_csv('domains.csv', header=None)[0].tolist()
  70. results = [compare_dns(domain) for domain in domains]
  71.  
  72. # Save results
  73. df = pd.DataFrame(results)
  74. df.to_csv('dns_comparison_report.csv', index=False)
  75. print("Report saved to dns_comparison_report.csv")
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement