← retour aux outils back to tools

# 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/massdns

## Overview

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