
Strumento di enumerazione dei sottodomini, pacchetti DNS asincroni, utilizza pcap per scansionare 1.600.000 sottodomini in 1 secondo.
English | 中文
KSubdomain è uno strumento di brute force per sottodomini basato su tecnologia stateless, che offre una velocità di scansione senza precedenti e un consumo di memoria estremamente ridotto. Utilizza socket raw per operare direttamente sulla scheda di rete, bypassando lo stack di protocollo del kernel del sistema, e si affida a un affidabile meccanismo di re-invio con tabella di stato per garantire l'integrità dei risultati. Supporta Windows, Linux e macOS ed è lo strumento ideale per rilevamento su larga scala di asset DNS.
--interface ripetuto per specificare più schede, accumulando larghezza di banda e utilizzando più IP di uscita.EnumStream/VerifyStream per elaborare i risultati in tempo reale.Test con CPU 4 core, banda 5 Mbps, dizionario da 100.000 voci:
Vai alle Release e scarica l'ultima versione per il tuo sistema.
Dipendenze:
libpcap-devgit clone https://github.com/boy-hack/ksubdomain.git
cd ksubdomain
# Si consiglia di iniettare il numero di versione tramite ldflags
go build -ldflags "-X github.com/boy-hack/ksubdomain/v2/pkg/core/conf.Version=v2.x.y" \
-o ksubdomain ./cmd/ksubdomain
Oppure usa go install:
go install github.com/boy-hack/ksubdomain/v2/cmd/ksubdomain@latest
Nota: Richiede privilegi di root /
CAP_NET_RAW(per l'uso di socket raw per la cattura di pacchetti)
Utilizzo:
ksubdomain [opzioni globali] <comando> [opzioni del comando]
Comandi:
enum, e Modalità enumerazione: brute force dei sottodomini di un dominio principale
verify, v Modalità verifica: verifica se un elenco di domini viene risolto
test Testa la velocità massima di invio della scheda di rete locale
device Mostra le informazioni sulle schede di rete disponibili
help, h Mostra l'aiuto
Opzioni globali:
--help, -h Mostra l'aiuto
--version, -v Stampa le informazioni sulla versione
Verifica se l'elenco di domini fornito ha record di risoluzione DNS.
Opzioni:
--domain, -d Specifica il dominio (ripetibile)
--filename, -f Legge l'elenco dei domini da un file
--stdin Legge dall'input standard
--bandwidth, -b Limite di banda, es. 5m, 10m, 100m (default 3m)
--resolvers, -r Specifica i server DNS (default usa quelli interni)
--output, -o Percorso del file di output
--format, -f Formato output: txt (default), json, csv, jsonl
--silent, -s Modalità silenziosa, mostra solo i domini (nessun banner o log)
--only-domain, --od Mostra solo il dominio, senza IP/record
--retry Numero di tentativi, -1 per tentativi infiniti (default 3)
--timeout Timeout in secondi per ogni query (default 6)
--interface, -e Specifica il nome della scheda di rete (ripetibile, per invio concorrente su più schede)
--wildcard-filter Filtro per record wildcard: none (default), basic, advanced
--predict Attiva la modalità di previsione dei sottodomini
--quiet, -q Non stampare i risultati a schermo (solo su file)
--color, -c Output a colori
# Verifica singolo/più domini
./ksubdomain v -d www.example.com -d mail.example.com
# Carica da file, salva come txt
./ksubdomain v -f domains.txt -o output.txt
# Input tramite pipe, banda 10M, modalità silenziosa per strumenti a valle
cat domains.txt | ./ksubdomain v --stdin -b 10m -s --od | httpx -silent
# Filtro avanzato per wildcard, output JSONL
./ksubdomain v -f domains.txt --wildcard-filter advanced --format jsonl -o output.jsonl
# Invio concorrente su più schede (accumula banda)
./ksubdomain v -f domains.txt --interface eth0 --interface eth1
Esegue brute force dei sottodomini del dominio specificato basandosi su dizionario e algoritmo di previsione.
Opzioni:
--domain, -d Dominio principale target (ripetibile)
--domain-list, --ds File con elenco di domini principali
--filename, -f Percorso del file dizionario (default usa il dizionario integrato)
--use-ns-records Legge i record NS del dominio e li aggiunge ai resolver DNS
(le altre opzioni sono uguali alla modalità verify)
# Enumerazione di un singolo dominio (con dizionario integrato)
./ksubdomain e -d example.com
# Specifica il file dizionario
./ksubdomain e -d example.com -f subdomains.txt -o result.txt
# Attiva modalità previsione + filtro avanzato wildcard
./ksubdomain e -d example.com --predict --wildcard-filter advanced
# Enumerazione batch di più domini principali
./ksubdomain e --domain-list roots.txt -b 10m --format jsonl -o result.jsonl
# Pipe verso httpx
./ksubdomain e -d example.com --od -s | httpx -silent
# Testa la velocità massima di invio della scheda di rete
./ksubdomain test
# Visualizza le schede di rete disponibili
./ksubdomain device
Nessuna necessità di impostare manualmente --timeout: il motore regola dinamicamente i limiti di timeout basandosi sul RTT misurato (media mobile esponenziale, EWMA α=0.125), riducendo i falsi negativi e evitando attese inutili.
Ripetendo --interface si possono utilizzare più schede di rete contemporaneamente per l'invio; più goroutine condividono lo stesso domainChan in competizione, realizzando naturalmente il bilanciamento del carico:
./ksubdomain e -d example.com --interface eth0 --interface eth1 -b 20m
Con --predict attivato, lo strumento prevede possibili sottodomini correlati basandosi su quelli già scoperti, aumentando il tasso di rilevamento.
none: nessun filtro (default)basic: filtro base, elimina gli IP wildcard evidentiadvanced: filtro avanzato, valutazione multidimensionale# Integrazione con httpx per rilevare Web attivi
./ksubdomain e -d example.com -s --od | httpx -silent
# Integrazione con nuclei per scansione vulnerabilità
./ksubdomain e -d example.com -s --od | nuclei -l /dev/stdin
# Elaborazione stream JSONL, prendi solo record A
./ksubdomain e -d example.com --format jsonl | jq -r 'select(.type=="A") | .domain'
# Batch multi-dominio + deduplicazione
./ksubdomain e --domain-list roots.txt -s --od | sort -u > all_subs.txt
macOS:
# Il buffer BPF è piccolo, si consiglia di limitare la banda
sudo ./ksubdomain e -d example.com -b 5m
WSL/WSL2:
# Di solito si usa eth0
./ksubdomain e -d example.com --interface eth0
Windows:
# È necessario installare Npcap ed eseguire come amministratore
.\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",
})
// Bloccante, raccoglie tutti i risultati
results, err := scanner.Enum("example.com")
// Callback in streaming, elaborazione in tempo reale
err = scanner.EnumStream(ctx, "example.com", func(r sdk.Result) {
fmt.Printf("%s => %v\n", r.Domain, r.Records)
})
Vedi Documentazione SDK e Documentazione API.
# Test unitari (senza root)
go test ./pkg/...
# Test di regressione (richiede root + rete)
go build -o ksubdomain ./cmd/ksubdomain
sudo go test ./test/regression/... -tags regression -v -timeout 120s
Licenza MIT — vedi LICENSE
| Strumento | Metodo | Tempo | Successi |
|---|
| KSubdomain | Invio su scheda di rete con pcap | ~30 secondi | 1397 |
| massdns | pcap/socket | ~3 minuti e 29 secondi | 1396 |
| dnsx | socket | ~5 minuti e 26 secondi | 1396 |
| Formato | Descrizione | Scenario d'uso |
|---|
txt | dominio => record, output in tempo reale | Default, lettura manuale |
json | JSON completo, scritto al termine | Elaborazione programmatica |
csv | Tabella CSV, scritta al termine | Analisi dati |
jsonl | Una riga per JSON, output in tempo reale | Elaborazione in streaming, pipe |