
Outil d'énumération de sous-domaines, paquets DNS asynchrones, utilise pcap pour scanner 1600,000 sous-domaines en 1 seconde
English | Français
KSubdomain est un outil de brute-force de sous-domaines basé sur la technologie sans état, offrant une vitesse de scan inégalée et une utilisation mémoire très faible. En utilisant des sockets bruts pour opérer directement sur la carte réseau, en contournant la pile réseau du noyau, et en combinant un mécanisme fiable de retransmission avec une table d'état, il garantit l'intégrité des résultats. Compatible avec Windows, Linux et macOS, c'est l'outil de prédilection pour la détection massive des actifs DNS.
--interface répétée pour spécifier plusieurs cartes réseau, cumulant la bande passante et exploitant plusieurs adresses IP de sortie.EnumStream/VerifyStream pour traiter les résultats en temps réel.Test avec 4 cœurs CPU, bande passante 5M, dictionnaire de 100 000 entrées :
Rendez-vous sur les Releases pour télécharger la dernière version correspondant à votre système.
Installation des dépendances :
libpcap-dev.git clone https://github.com/boy-hack/ksubdomain.git
cd ksubdomain
# Il est recommandé d'injecter le numéro de version via ldflags
go build -ldflags "-X github.com/boy-hack/ksubdomain/v2/pkg/core/conf.Version=v2.x.y" \
-o ksubdomain ./cmd/ksubdomain
Ou utilisez go install :
go install github.com/boy-hack/ksubdomain/v2/cmd/ksubdomain@latest
Remarque : Nécessite les droits root ou
CAP_NET_RAW(capture avec socket brut).
Usage :
ksubdomain [options globales] <commande> [options de commande]
Commandes :
enum, e Mode énumération : brute-force des sous-domaines d'un domaine principal
verify, v Mode vérification : vérifie si une liste de domaines est résolue
test Teste la vitesse maximale d'envoi de la carte réseau locale
device Affiche les informations sur les cartes réseau disponibles
help, h Affiche l'aide
Options globales :
--help, -h Affiche l'aide
--version, -v Affiche la version
Vérifie si les domaines fournis possèdent des enregistrements DNS.
Options :
--domain, -d Spécifie un domaine (peut être répété)
--filename, -f Lit une liste de domaines depuis un fichier
--stdin Lit depuis l'entrée standard
--bandwidth, -b Limite de bande passante, ex. 5m, 10m, 100m (par défaut 3m)
--resolvers, -r Spécifie les serveurs DNS (utilise ceux intégrés par défaut)
--output, -o Chemin du fichier de sortie
--format, -f Format de sortie : txt (défaut), json, csv, jsonl
--silent, -s Mode silencieux, n'affiche que les domaines (sans bannière ni journal)
--only-domain, --od N'affiche que le nom de domaine, sans IP/enregistrement
--retry Nombre de tentatives, -1 pour illimité (défaut 3)
--timeout Délai d'attente en secondes pour chaque requête (défaut 6)
--interface, -e Nom de l'interface réseau (peut être répété pour concurrence)
--wildcard-filter Filtre de résolution générique : none (défaut), basic, advanced
--predict Active le mode prédiction de sous-domaines
--quiet, -q N'affiche pas les résultats à l'écran (écrit seulement dans le fichier)
--color, -c Sortie colorée
# Vérifier un/plusieurs domaines
./ksubdomain v -d www.example.com -d mail.example.com
# Depuis un fichier, sauvegarder en txt
./ksubdomain v -f domains.txt -o output.txt
# Entrée par pipe, bande passante 10M, mode silencieux pour chaînage
cat domains.txt | ./ksubdomain v --stdin -b 10m -s --od | httpx -silent
# Filtrage avancé des résolutions génériques, sortie JSONL
./ksubdomain v -f domains.txt --wildcard-filter advanced --format jsonl -o output.jsonl
# Concurrence multi-cartes (cumul de bande passante)
./ksubdomain v -f domains.txt --interface eth0 --interface eth1
Brute-force des sous-domaines d'un domaine principal en utilisant un dictionnaire et un algorithme de prédiction.
Options :
--domain, -d Domaine principal cible (peut être répété)
--domain-list, --ds Fichier contenant plusieurs domaines principaux
--filename, -f Chemin du dictionnaire (utilise le dictionnaire intégré par défaut)
--use-ns-records Lit les enregistrements NS des domaines et les ajoute aux résolveurs DNS
(Les autres options sont identiques au mode verify)
# Énumération d'un seul domaine (dictionnaire intégré)
./ksubdomain e -d example.com
# Spécifier un fichier dictionnaire
./ksubdomain e -d example.com -f subdomains.txt -o result.txt
# Activer le mode prédiction + filtrage avancé des résolutions génériques
./ksubdomain e -d example.com --predict --wildcard-filter advanced
# Énumération par lots de plusieurs domaines principaux
./ksubdomain e --domain-list roots.txt -b 10m --format jsonl -o result.jsonl
# Chaînage avec httpx
./ksubdomain e -d example.com --od -s | httpx -silent
# Tester la vitesse maximale d'envoi de la carte réseau
./ksubdomain test
# Afficher les cartes réseau disponibles
./ksubdomain device
Inutile de régler manuellement --timeout ; le moteur ajuste dynamiquement les limites supérieure et inférieure du délai d'attente en fonction du RTT mesuré (moyenne mobile exponentielle pondérée, EWMA α=0.125). Cela réduit efficacement les faux négatifs tout en évitant les attentes inutiles.
En répétant l'option --interface, vous pouvez utiliser plusieurs cartes réseau pour envoyer simultanément. Plusieurs goroutines partagent le même domainChan en concurrence, réalisant naturellement l'équilibrage de charge :
./ksubdomain e -d example.com --interface eth0 --interface eth1 -b 20m
En activant --predict, l'outil prédit des sous-domaines supplémentaires en fonction des sous-domaines déjà découverts, améliorant ainsi le taux de découverte.
none : Aucun filtre (défaut)basic : Filtrage basique, élimine les IP de résolution générique évidentesadvanced : Filtrage avancé, jugement multidimensionnel# Chaînage avec httpx pour détecter les serveurs Web
./ksubdomain e -d example.com -s --od | httpx -silent
# Chaînage avec nuclei pour le scan de vulnérabilités
./ksubdomain e -d example.com -s --od | nuclei -l /dev/stdin
# Traitement en flux JSONL, ne conserver que les enregistrements A
./ksubdomain e -d example.com --format jsonl | jq -r 'select(.type=="A") | .domain'
# Énumération par lots multi-domaines + déduplication
./ksubdomain e --domain-list roots.txt -s --od | sort -u > all_subs.txt
macOS :
# Le tampon BPF est petit, il est recommandé de limiter la bande passante
sudo ./ksubdomain e -d example.com -b 5m
WSL/WSL2 :
# Utilise généralement eth0
./ksubdomain e -d example.com --interface eth0
Windows :
# Nécessite d'abord l'installation de Npcap, exécuter en tant qu'administrateur
.\ksubdomain.exe enum -d example.com
go get github.com/boy-hack/ksubdomain/v2/sdk
import "github.com/boy-hack/ksubdomain/v2/sdk"
scanner := sdk.NewScanner(&sdk.Config{
Bandwidth: "5m",
Retry: 3,
WildcardFilter: "advanced",
})
// Bloquant, collecte tous les résultats
results, err := scanner.Enum("example.com")
// Callback de flux, traitement en temps réel
err = scanner.EnumStream(ctx, "example.com", func(r sdk.Result) {
fmt.Printf("%s => %v\n", r.Domain, r.Records)
})
Voir la Documentation SDK et la Documentation API.
# Tests unitaires (pas besoin de root)
go test ./pkg/...
# Tests de régression (nécessite root + réseau)
go build -o ksubdomain ./cmd/ksubdomain
sudo go test ./test/regression/... -tags regression -v -timeout 120s
Licence MIT — voir le fichier LICENSE pour plus de détails.
| Outil | Méthode | Durée | Succès |
|---|
| KSubdomain | envoi via pcap | ~30 secondes | 1397 |
| massdns | pcap/socket | ~3 min 29 s | 1396 |
| dnsx | socket | ~5 min 26 s | 1396 |
| Format | Description | Cas d'utilisation |
|---|
txt | domaine => enregistrement, sortie en temps réel | Par défaut, lecture humaine |
json | JSON complet, écrit après la fin | Analyse par programme |
csv | Tableau CSV, écrit après la fin | Analyse de données |
jsonl | Un objet JSON par ligne, sortie en temps réel | Traitement en flux, chaînage |