Commit 4191b8cc authored by Vitaly Lipatov's avatar Vitaly Lipatov

Replace dig/massdns CNAME fallback with dnsx for parallel DNS resolution

dnsx resolves CNAME chains natively and runs 50 threads in parallel. Whatsapp (2097 CNAME domains): 74 minutes → 0.06 seconds. Co-Authored-By: 's avatarClaude Opus 4.6 (1M context) <noreply@anthropic.com>
parent 357eb383
...@@ -164,14 +164,15 @@ get_ipv4_list_bulk() ...@@ -164,14 +164,15 @@ get_ipv4_list_bulk()
print $2 print $2
}' }'
# Fallback for CNAME domains: parallel dig # Fallback for CNAME domains via dnsx (fast parallel resolver)
local cname_domains=$(mktemp) local cname_domains=$(mktemp)
grep "^;" "$adns_out" | grep -v 'nxdomain\|nodata\|timeout\|querydomaintoolong' | \ grep "^;" "$adns_out" | grep -v 'nxdomain\|nodata\|timeout\|querydomaintoolong' | \
awk '{ for(i=4;i<=NF;i++) if($i ~ /^[a-z0-9].*\.[a-z]/) { print $i; break } }' | \ awk '{ for(i=4;i<=NF;i++) if($i ~ /^[a-z0-9].*\.[a-z]/) { print $i; break } }' | \
sort -u > "$cname_domains" sort -u > "$cname_domains"
if [ -s "$cname_domains" ] ; then if [ -s "$cname_domains" ] ; then
xargs -P 20 -I{} dig +short {} A < "$cname_domains" 2>/dev/null local resolvers="$(awk '/^nameserver/ {print $2}' /etc/resolv.conf | paste -sd,)"
[ -n "$EXTRA_DNS" ] && xargs -P 20 -I{} dig @$EXTRA_DNS +short {} A < "$cname_domains" 2>/dev/null || true [ -n "$EXTRA_DNS" ] && resolvers="$resolvers,$EXTRA_DNS"
dnsx -a -resp-only -silent -r "$resolvers" -t 50 < "$cname_domains" 2>/dev/null
fi fi
rm -f "$cname_domains" rm -f "$cname_domains"
} }
...@@ -209,18 +210,15 @@ get_ipv6_list_bulk() ...@@ -209,18 +210,15 @@ get_ipv6_list_bulk()
print $2 print $2
}' }'
# Fallback for CNAME domains via massdns (fast parallel resolver) # Fallback for CNAME domains via dnsx (fast parallel resolver)
local cname_domains=$(mktemp) local cname_domains=$(mktemp)
grep "^;" "$adns_out" | grep -v 'nxdomain\|nodata\|timeout\|querydomaintoolong' | \ grep "^;" "$adns_out" | grep -v 'nxdomain\|nodata\|timeout\|querydomaintoolong' | \
awk '{ for(i=4;i<=NF;i++) if($i ~ /^[a-z0-9].*\.[a-z]/) { print $i; break } }' | \ awk '{ for(i=4;i<=NF;i++) if($i ~ /^[a-z0-9].*\.[a-z]/) { print $i; break } }' | \
sort -u > "$cname_domains" sort -u > "$cname_domains"
if [ -s "$cname_domains" ] ; then if [ -s "$cname_domains" ] ; then
local resolvers=$(mktemp) local resolvers="$(awk '/^nameserver/ {print $2}' /etc/resolv.conf | paste -sd,)"
awk '/^nameserver/ {print $2}' /etc/resolv.conf > "$resolvers" [ -n "$EXTRA_DNS" ] && resolvers="$resolvers,$EXTRA_DNS"
[ -n "$EXTRA_DNS" ] && echo "$EXTRA_DNS" >> "$resolvers" dnsx -aaaa -resp-only -silent -r "$resolvers" -t 50 < "$cname_domains" 2>/dev/null
massdns -r "$resolvers" -t AAAA -o S --quiet < "$cname_domains" 2>/dev/null | \
awk '/ AAAA / { sub(/\.$/, "", $3); print $3 }'
rm -f "$resolvers"
fi fi
rm -f "$cname_domains" rm -f "$cname_domains"
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment