mdaxfr

- Mass DNS AXFR
git clone git://git.acid.vegas/mdaxfr.git
Log | Files | Refs | Archive | README | LICENSE

commit 03c09942feef885b667589187300b2e2a219d191
parent 48d482f53626166c4ecd76affc28218a05db6c20
Author: acidvegas <acid.vegas@acid.vegas>
Date: Mon, 6 Nov 2023 21:09:15 -0500

Parse the root tlds from the root nameservers instead, added more ozones

Diffstat:
Mmdaxfr | 17++++++++++++++---
Mmdaxfr.py | 9+++++++--
Mozones | 6+++++-

3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/mdaxfr b/mdaxfr
@@ -3,6 +3,8 @@
 
 OUTPUT_DIR="axfrout"
 mkdir -p "$OUTPUT_DIR"
+mkdir -p "$OUTPUT_DIR/root"
+mkdir -p "$OUTPUT_DIR/psl"
 
 resolve_nameserver() {
 	dig +short "$1" A || dig +short "$1" AAAA
@@ -31,11 +33,20 @@ attempt_axfr() {
 
 # For root nameservers
 for root in $(dig +short . NS); do
-	attempt_axfr "." "$root" "$OUTPUT_DIR/$root.txt"
+	attempt_axfr "." "$root" "$OUTPUT_DIR/root/$root.txt"
 done
 
+# Parse the tld list from a root nameserver
+rndroot=$(find $OUTPUT/root/*.root-servers.net.txt -type f | shuf -n 1)
+if [ -z $rndroot ]; then
+	echo "Failed to AXFR a root nameserver (using IANA list instead)"
+	tlds=$(curl -s 'https://data.iana.org/TLD/tlds-alpha-by-domain.txt' | tail -n +2 | tr '[:upper:]' '[:lower:]')
+else 
+	tlds=$(cat $rndroot | grep -E 'IN\s+NS' | awk '{print $1}' | sed 's/\.$//' | sort -u)
+fi
+
 # For TLD nameservers
-for tld in $(curl -s 'https://data.iana.org/TLD/tlds-alpha-by-domain.txt' | tail -n +2 | tr '[:upper:]' '[:lower:]'); do
+for tld in $tlds; do
 	for ns in $(dig +short "$tld" NS); do
 		attempt_axfr "$tld" "$ns" "$OUTPUT_DIR/$tld.txt"
 	done
@@ -44,6 +55,6 @@ done
 # For Public Suffix List TLD nameservers
 for tld in $(curl -s https://publicsuffix.org/list/public_suffix_list.dat | grep -vE '^(//|.*[*!])' | grep '\.' | awk '{print $1}'); do
 	for ns in $(dig +short "$tld" NS); do
-		attempt_axfr "$tld" "$ns" "$OUTPUT_DIR/$tld.txt"
+		attempt_axfr "$tld" "$ns" "$OUTPUT_DIR/psl/$tld.txt"
 	done
 done
diff --git a/mdaxfr.py b/mdaxfr.py
@@ -60,8 +60,13 @@ def get_nameservers(target: str) -> list:
 
 
 def get_root_tlds() -> list:
-	'''Get the root TLDs from IANA.'''
-	tlds = urllib.request.urlopen('https://data.iana.org/TLD/tlds-alpha-by-domain.txt').read().decode('utf-8').lower().split('\n')[1:]
+	'''Get the root TLDs from a root nameservers.'''
+	rndroot = [root for root in os.listdir('root') if root.endswith('.root-servers.net.txt')][0]
+	if rndroot:
+		tlds = sorted(set([item.split()[0][:-1] for item in open(rndroot).read().split('\n') if item and 'IN' in item and 'NS' in item]))
+	else:
+		logging.warning('Failed to find root nameserver list, using IANA list')
+		tlds = urllib.request.urlopen('https://data.iana.org/TLD/tlds-alpha-by-domain.txt').read().decode('utf-8').lower().split('\n')[1:]
 	random.shuffle(tlds)
 	return tlds
 
diff --git a/ozones b/ozones
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Mass DNS AXFR (POSIX version) - developed by acidvegas (https://git.acid.vegas/mdaxfr)
+# Mass DNS AXFR (other zones) - developed by acidvegas (https://git.acid.vegas/mdaxfr)
 
 ```bash
 curl -s https://www.internic.net/domain/root.zone | awk '$4=="NS" {gsub(/\.$/, "", $NF); print $NF}'
@@ -15,6 +15,7 @@ dig @zonedata.switch.ch li. AXFR -y hmac-sha512:tsig-zonedata-li-public-21-01:t8
 dig @zonedata.iis.se  se  AXFR > se.txt
 dig @zonedata.iis.se  nu  AXFR > nu.txt
 dig @zone.internet.ee ee. AXFR > ee.txt
+dig @ns1.gov.ps xn--ygbi2ammx. AXFR > xn--ygbi2ammx.txt
 
 wget -O sk.txt https://sk-nic.sk/subory/domains.txt
 
@@ -23,5 +24,8 @@ wget -O nc.txt https://www.domaine.nc/whos?who=A*
 
 # https://www.afnic.fr/produits-services/services-associes/donnees-partagees/
 
+# not sure about this one....
+curl -s -H 'Accept: application/json' 'https://odata.domain.fi/OpenDomainData.svc/Domains?$inlinecount=allpages'
+
 wget -O dn42.txt http://ix.ucis.nl/dn42/dnszone2.php?
 ```