
Ferramenta de enumeração de subdomínios, pacotes DNS assíncronos, use pcap para escanear 1600,000 subdomínios em 1 segundo
English | Português
KSubdomain é uma ferramenta de brute force de subdomínios baseada em tecnologia sem estado, oferecendo velocidade de varredura sem precedentes e consumo extremamente baixo de memória. Utiliza sockets brutos para operar diretamente o adaptador de rede, contornando a pilha de protocolos do kernel do sistema, com um mecanismo confiável de reenvio de tabela de estado para garantir a integridade dos resultados. Suporta Windows, Linux e macOS, sendo a ferramenta preferida para detecção em larga escala de ativos DNS.
--interface para especificar várias placas de rede, somando largura de banda e utilizando múltiplos IPs de saídaEnumStream/VerifyStream para processamento em tempo real dos resultadosTeste com CPU de 4 núcleos, largura de banda de 5M e dicionário de 100.000 entradas:
Acesse Releases para baixar a versão mais recente para seu sistema.
Instalação de Dependências:
libpcap-devgit clone https://github.com/boy-hack/ksubdomain.git
cd ksubdomain
# Recomenda-se injetar o número da versão via ldflags
go build -ldflags "-X github.com/boy-hack/ksubdomain/v2/pkg/core/conf.Version=v2.x.y" \
-o ksubdomain ./cmd/ksubdomain
Ou usando go install:
go install github.com/boy-hack/ksubdomain/v2/cmd/ksubdomain@latest
Nota: Requer privilégios root /
CAP_NET_RAW(para captura de pacotes com socket bruto)
Uso:
ksubdomain [opções globais] <comando> [opções do comando]
Comandos:
enum, e Modo enumeração: brute force de subdomínios para um domínio principal
verify, v Modo verificação: verifica se uma lista de domínios resolve
test Testa a velocidade máxima de envio da placa de rede local
device Exibe informações das placas de rede disponíveis
help, h Exibe ajuda
Opções Globais:
--help, -h Exibe ajuda
--version, -v Exibe informações da versão
Verifica se a lista de domínios fornecida possui registros de resolução DNS.
Opções:
--domain, -d Especifica domínio (pode ser repetido)
--filename, -f Lê lista de domínios de um arquivo
--stdin Lê da entrada padrão
--bandwidth, -b Limite de largura de banda, ex: 5m, 10m, 100m (padrão 3m)
--resolvers, -r Especifica servidores DNS (padrão usa internos)
--output, -o Caminho do arquivo de saída
--format, -f Formato de saída: txt (padrão), json, csv, jsonl
--silent, -s Modo silencioso, exibe apenas domínios (sem banner e logs)
--only-domain, --od Exibe apenas domínios, sem IPs/registros
--retry Número de tentativas, -1 para tentativas infinitas (padrão 3)
--timeout Timeout em segundos para cada consulta (padrão 6)
--interface, -e Nome da placa de rede (pode ser repetido, envio concorrente)
--wildcard-filter Filtro de wildcard: none (padrão), basic, advanced
--predict Ativa modo de predição de subdomínios
--quiet, -q Não imprime resultados na tela (apenas arquivo)
--color, -c Saída colorida
# Verificar domínio único/múltiplos
./ksubdomain v -d www.example.com -d mail.example.com
# Ler de arquivo, salvar como txt
./ksubdomain v -f domains.txt -o output.txt
# Entrada via pipe, largura de banda 10M, modo silencioso para integração com ferramentas downstream
cat domains.txt | ./ksubdomain v --stdin -b 10m -s --od | httpx -silent
# Filtro avançado de wildcard, saída JSONL
./ksubdomain v -f domains.txt --wildcard-filter advanced --format jsonl -o output.jsonl
# Envio concorrente por múltiplas placas de rede (somando largura de banda)
./ksubdomain v -f domains.txt --interface eth0 --interface eth1
Realiza brute force de subdomínios para um domínio específico usando dicionário e algoritmo de predição.
Opções:
--domain, -d Domínio principal alvo (pode ser repetido)
--domain-list, --ds Arquivo com vários domínios principais
--filename, -f Caminho do arquivo de dicionário (padrão usa dicionário interno)
--use-ns-records Lê registros NS do domínio e os adiciona aos resolvedores DNS
(demais opções iguais ao modo verify)
# Enumerar domínio único (usando dicionário interno)
./ksubdomain e -d example.com
# Especificar arquivo de dicionário
./ksubdomain e -d example.com -f subdomains.txt -o result.txt
# Ativar modo de predição + filtro avançado de wildcard
./ksubdomain e -d example.com --predict --wildcard-filter advanced
# Enumerar vários domínios principais em lote
./ksubdomain e --domain-list roots.txt -b 10m --format jsonl -o result.jsonl
# Integrar com httpx via pipe
./ksubdomain e -d example.com --od -s | httpx -silent
# Testar velocidade máxima de envio da placa de rede
./ksubdomain test
# Ver placas de rede disponíveis
./ksubdomain device
Não é necessário definir --timeout manualmente; o mecanismo ajusta dinamicamente o limite superior e inferior com base no RTT medido (média móvel exponencial ponderada, EWMA α=0.125), reduzindo efetivamente falsos negativos e evitando esperas desnecessárias.
Repita --interface para usar várias placas de rede simultaneamente. Múltiplas goroutines compartilham o mesmo domainChan em competição, proporcionando balanceamento de carga de forma natural:
./ksubdomain e -d example.com --interface eth0 --interface eth1 -b 20m
Ativando --predict, a ferramenta prevê subdomínios relacionados com base nos já descobertos, aumentando a taxa de descoberta.
none: Sem filtro (padrão)basic: Filtro básico, remove IPs claramente de wildcardadvanced: Filtro avançado, análise multidimensional# Integrar com httpx para detectar Web ativo
./ksubdomain e -d example.com -s --od | httpx -silent
# Integrar com nuclei para varredura de vulnerabilidades
./ksubdomain e -d example.com -s --od | nuclei -l /dev/stdin
# Processamento em fluxo JSONL, extrair apenas registros A
./ksubdomain e -d example.com --format jsonl | jq -r 'select(.type=="A") | .domain'
# Vários domínios em lote + deduplicação
./ksubdomain e --domain-list roots.txt -s --od | sort -u > all_subs.txt
macOS:
# Buffer BPF pequeno, recomenda-se limitar largura de banda
sudo ./ksubdomain e -d example.com -b 5m
WSL/WSL2:
# Geralmente use eth0
./ksubdomain e -d example.com --interface eth0
Windows:
# Necessário instalar Npcap primeiro e executar como administrador
.\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",
})
// Bloqueante, coleta todos os resultados
results, err := scanner.Enum("example.com")
// Callback em fluxo, processamento em tempo real
err = scanner.EnumStream(ctx, "example.com", func(r sdk.Result) {
fmt.Printf("%s => %v\n", r.Domain, r.Records)
})
Consulte a Documentação do SDK e a Documentação da API.
# Testes unitários (não requer root)
go test ./pkg/...
# Testes de regressão (requer root + rede)
go build -o ksubdomain ./cmd/ksubdomain
sudo go test ./test/regression/... -tags regression -v -timeout 120s
Licença MIT — consulte LICENSE
| Ferramenta | Método | Tempo | Sucessos |
|---|
| KSubdomain | Envio via placa de rede pcap | ~30 segundos | 1397 |
| massdns | pcap/socket | ~3 minutos 29 segundos | 1396 |
| dnsx | socket | ~5 minutos 26 segundos | 1396 |
| Formato | Descrição | Caso de Uso |
|---|
txt | domínio => registro, saída em tempo real | Padrão, visualização manual |
json | JSON completo, escrito ao final | Processamento por programas |
csv | Tabela CSV, escrita ao final | Análise de dados |
jsonl | Uma linha JSON por registro, saída em tempo real | Processamento em fluxo, integração via pipe |