massdns
Résolveur DNS stub haute performance pour les résolutions en masse. Résout des centaines de milliers de requêtes DNS par seconde, idéal pour l'énumération massive de sous-domaines. High-performance DNS stub resolver for bulk lookups. Resolves hundreds of thousands of DNS queries per second — ideal for massive subdomain enumeration.
↗ https://github.com/blechschmidt/massdnsOverview
massdns is a high-performance DNS resolver capable of resolving millions of DNS queries per minute. It’s used as a backend for subdomain brute-forcing — you provide a massive wordlist, massdns resolves all of them against multiple DNS servers in parallel, and filters live subdomains from the noise.
Installation
git clone https://github.com/blechschmidt/massdns
cd massdns
make
# Binary at: ./bin/massdns
Basic Usage
Resolve a list of domains
massdns -r resolvers.txt -t A -o S subdomains.txt
With specific output format
massdns -r resolvers.txt -t A -o J subdomains.txt > results.json
High-rate scanning
massdns -r resolvers.txt -t A -o S -s 10000 subdomains.txt
Save to file
massdns -r resolvers.txt -t A subdomains.txt -o S > resolved.txt
Resolvers File
# Use a list of public DNS resolvers
# Download pre-made list:
# https://github.com/janmasarik/resolvers
Or create your own:
cat > resolvers.txt << EOF
8.8.8.8
8.8.4.4
1.1.1.1
1.0.0.1
208.67.222.222
EOF
# Recommended: use a large list of resolvers to distribute load
# (massdns queries each resolver in rotation)
Subdomain Bruteforcing Workflow
Method 1: Direct subdomain brute-force Prepare wordlist with DOMAIN appended
sed 's/$/.example.com/' /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt > subdomains.txt
Then resolve
massdns -r resolvers.txt -t A subdomains.txt -o S > resolved.txt
Method 2: Use puredns (wrapper around massdns)
puredns bruteforce /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt example.com
Method 3: Use ShuffleDNS (subfinder’s massdns wrapper)
shuffledns -d example.com -w wordlist.txt -r resolvers.txt
Output Formats
Simple (one line per result)
massdns -r resolvers.txt -t A -o S subdomains.txt
JSON
massdns -r resolvers.txt -t A -o J subdomains.txt
Ndjson (newline-delimited JSON)
massdns -r resolvers.txt -t A -o J subdomains.txt
# Output example (Simple):
# dev.example.com. A 1.2.3.4
# api.example.com. A 1.2.3.5
Rate Control
massdns -r resolvers.txt -t A -s 5000 subdomains.txt # 5000/sec
massdns -r resolvers.txt -t A -s 10000 subdomains.txt # 10000/sec (fast)
# Default is unlimited — can cause issues with rate-limited resolvers
# Use a large resolver list to distribute the load
puredns (Recommended Wrapper)
puredns uses massdns internally with wildcard filtering
pip3 install puredns
→ or: go install github.com/d3mondev/puredns/v2@latest
Bruteforce subdomains
puredns bruteforce wordlist.txt example.com -r resolvers.txt
Resolve a list of domains
puredns resolve domains.txt -r resolvers.txt
# puredns automatically handles wildcard DNS to reduce false positives
Tips
- Always use a large resolver list (100+ resolvers) to avoid hitting rate limits
- Wildcard DNS (
*.example.com) makes all queries return hits — puredns handles this automatically - Combine with subfinder/amass passive results for comprehensive coverage
- Pipe results into httpx to find live web services among discovered subdomains
Help / Man page
massdns [options] <domains>
-r FILE Resolver list file (required)
-t TYPE DNS record type (A, AAAA, CNAME, MX, NS, TXT)
-o FORMAT Output format: S (simple), L (list), J (json)
-s N Queries per second
-c N Concurrent resolvers (default: 500)
--retry N Retry count (default: 10)
-4 Use IPv4 only
-6 Use IPv6 only
-v Verbose output
Vue d’ensemble
massdns est un résolveur DNS haute performance capable de résoudre des millions de requêtes DNS par minute. Il sert de moteur pour le brute-force de sous-domaines : on lui fournit une wordlist massive, massdns résout l’ensemble en parallèle contre plusieurs serveurs DNS, puis filtre les sous-domaines actifs dans le bruit.
Installation
git clone https://github.com/blechschmidt/massdns
cd massdns
make
# Binaire disponible ici : ./bin/massdns
Utilisation de base
# Résoudre une liste de domaines
massdns -r resolvers.txt -t A -o S subdomains.txt
# Avec un format de sortie spécifique
massdns -r resolvers.txt -t A -o J subdomains.txt > results.json
# Scan à haut débit
massdns -r resolvers.txt -t A -o S -s 10000 subdomains.txt
# Sauvegarder dans un fichier
massdns -r resolvers.txt -t A subdomains.txt -o S > resolved.txt
Fichier de résolveurs
# Utiliser une liste de résolveurs DNS publics
# Télécharger une liste toute faite :
# https://github.com/janmasarik/resolvers
Ou créer la sienne :
cat > resolvers.txt << EOF
8.8.8.8
8.8.4.4
1.1.1.1
1.0.0.1
208.67.222.222
EOF
# Recommandé : utiliser une grande liste de résolveurs pour répartir la charge
# (massdns interroge chaque résolveur à tour de rôle)
Workflow de brute-force de sous-domaines
# Méthode 1 : brute-force direct des sous-domaines
# Préparer la wordlist avec le DOMAINE ajouté
sed 's/$/.example.com/' /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt > subdomains.txt
# Puis résoudre
massdns -r resolvers.txt -t A subdomains.txt -o S > resolved.txt
# Méthode 2 : utiliser puredns (wrapper autour de massdns)
puredns bruteforce /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt example.com
# Méthode 3 : utiliser ShuffleDNS (wrapper massdns de subfinder)
shuffledns -d example.com -w wordlist.txt -r resolvers.txt
Formats de sortie
# Simple (une ligne par résultat)
massdns -r resolvers.txt -t A -o S subdomains.txt
# JSON
massdns -r resolvers.txt -t A -o J subdomains.txt
# Ndjson (JSON délimité par des sauts de ligne)
massdns -r resolvers.txt -t A -o J subdomains.txt
# Exemple de sortie (Simple) :
# dev.example.com. A 1.2.3.4
# api.example.com. A 1.2.3.5
Contrôle du débit
massdns -r resolvers.txt -t A -s 5000 subdomains.txt # 5000/sec
massdns -r resolvers.txt -t A -s 10000 subdomains.txt # 10000/sec (rapide)
# Par défaut illimité : peut poser problème avec des résolveurs à limitation de débit
# Utiliser une grande liste de résolveurs pour répartir la charge
puredns (wrapper recommandé)
# puredns utilise massdns en interne avec un filtrage des wildcards
pip3 install puredns
# ou : go install github.com/d3mondev/puredns/v2@latest
# Brute-force de sous-domaines
puredns bruteforce wordlist.txt example.com -r resolvers.txt
# Résoudre une liste de domaines
puredns resolve domains.txt -r resolvers.txt
# puredns gère automatiquement le DNS wildcard pour réduire les faux positifs
Conseils
- Toujours utiliser une grande liste de résolveurs (100+) pour éviter les limitations de débit
- Le DNS wildcard (
*.example.com) fait que toutes les requêtes retournent un résultat positif : puredns gère cela automatiquement - Combiner avec les résultats passifs de subfinder/amass pour une couverture complète
- Rediriger les résultats vers httpx pour trouver les services web actifs parmi les sous-domaines découverts
Aide / Page de manuel
massdns [options] <domains>
-r FILE Resolver list file (required)
-t TYPE DNS record type (A, AAAA, CNAME, MX, NS, TXT)
-o FORMAT Output format: S (simple), L (list), J (json)
-s N Queries per second
-c N Concurrent resolvers (default: 500)
--retry N Retry count (default: 10)
-4 Use IPv4 only
-6 Use IPv6 only
-v Verbose output