
Herramienta de enumeración de subdominios, paquetes DNS asíncronos, usa pcap para escanear 1600,000 subdominios en 1 segundo
English | 中文
KSubdomain es una herramienta de fuerza bruta de subdominios basada en tecnología sin estado, que ofrece una velocidad de escaneo sin precedentes y un consumo de memoria extremadamente bajo. Utiliza sockets raw para operar directamente el adaptador de red, evitando la pila de protocolos del kernel del sistema, y cuenta con un mecanismo confiable de reenvío de tabla de estados para garantizar la integridad de los resultados. Compatible con Windows, Linux y macOS, es la herramienta preferida para la detección masiva de activos DNS.
--interface repetido para múltiples tarjetas de red, sumando ancho de banda y utilizando múltiples IPs de salidaEnumStream/VerifyStream para procesar resultados en tiempo realPrueba con CPU de 4 núcleos, ancho de banda de 5M y diccionario de 100.000 entradas:
Visite Releases para descargar la última versión para su sistema.
Instalación de dependencias:
libpcap-devgit clone https://github.com/boy-hack/ksubdomain.git
cd ksubdomain
# Se recomienda inyectar el número de versión mediante ldflags
go build -ldflags "-X github.com/boy-hack/ksubdomain/v2/pkg/core/conf.Version=v2.x.y" \
-o ksubdomain ./cmd/ksubdomain
O usar go install:
go install github.com/boy-hack/ksubdomain/v2/cmd/ksubdomain@latest
Nota: Requiere permisos de root /
CAP_NET_RAWpara ejecutarse (captura de paquetes con socket raw)
Uso:
ksubdomain [opciones globales] <comando> [opciones del comando]
Comandos:
enum, e Modo enumeración: fuerza bruta de subdominios en un dominio principal
verify, v Modo verificación: verifica si una lista de dominios resuelve
test Prueba la velocidad máxima de envío de la tarjeta de red local
device Muestra información de las tarjetas de red disponibles
help, h Muestra ayuda
Opciones globales:
--help, -h Muestra ayuda
--version, -v Imprime la versión
Verifica si la lista de dominios proporcionada tiene registros de resolución DNS.
Opciones:
--domain, -d Especifica un dominio (repetible)
--filename, -f Lee la lista de dominios desde un archivo
--stdin Lee desde la entrada estándar
--bandwidth, -b Límite de ancho de banda, ej. 5m, 10m, 100m (por defecto 3m)
--resolvers, -r Especifica servidores DNS (por defecto usa los incorporados)
--output, -o Ruta del archivo de salida
--format, -f Formato de salida: txt (por defecto), json, csv, jsonl
--silent, -s Modo silencioso, solo muestra dominios (sin banner ni logs)
--only-domain, --od Solo muestra el dominio, sin IP/registro
--retry Número de reintentos, -1 para reintentos infinitos (por defecto 3)
--timeout Timeout de consulta individual en segundos (por defecto 6)
--interface, -e Especifica el nombre de la interfaz (repetible, múltiples interfaces concurrentes)
--wildcard-filter Filtro de comodín: none (por defecto), basic, advanced
--predict Habilita el modo de predicción de subdominios
--quiet, -q No imprime resultados en pantalla (solo escribe en archivo)
--color, -c Salida con colores
# Verificar un solo dominio / múltiples dominios
./ksubdomain v -d www.example.com -d mail.example.com
# Leer desde archivo, guardar en txt
./ksubdomain v -f domains.txt -o output.txt
# Entrada por pipe, ancho de banda 10M, modo silencioso para canalizar a herramientas posteriores
cat domains.txt | ./ksubdomain v --stdin -b 10m -s --od | httpx -silent
# Filtro avanzado de comodín, salida en JSONL
./ksubdomain v -f domains.txt --wildcard-filter advanced --format jsonl -o output.jsonl
# Envío concurrente con múltiples interfaces (suma de ancho de banda)
./ksubdomain v -f domains.txt --interface eth0 --interface eth1
Realiza fuerza bruta de subdominios en el dominio especificado usando diccionarios y algoritmos de predicción.
Opciones:
--domain, -d Dominio principal objetivo (repetible)
--domain-list, --ds Archivo con múltiples dominios principales
--filename, -f Ruta del diccionario (por defecto usa el diccionario incorporado)
--use-ns-records Lee los registros NS del dominio y los agrega a los resolvedores DNS
(las demás opciones son iguales que en modo verify)
# Enumerar un solo dominio (usando diccionario incorporado)
./ksubdomain e -d example.com
# Especificar archivo de diccionario
./ksubdomain e -d example.com -f subdomains.txt -o result.txt
# Habilitar modo de predicción + filtro avanzado de comodín
./ksubdomain e -d example.com --predict --wildcard-filter advanced
# Enumeración por lotes de múltiples dominios principales
./ksubdomain e --domain-list roots.txt -b 10m --format jsonl -o result.jsonl
# Canalizar a httpx
./ksubdomain e -d example.com --od -s | httpx -silent
# Probar velocidad máxima de envío de la tarjeta de red
./ksubdomain test
# Ver tarjetas de red disponibles
./ksubdomain device
Sin necesidad de establecer --timeout manualmente, el motor ajusta dinámicamente los límites superior e inferior del timeout basándose en el RTT medido real (media móvil exponencial ponderada, EWMA α=0.125), reduciendo eficazmente los falsos negativos sin esperas innecesarias.
Repitiendo --interface se pueden usar varias tarjetas de red simultáneamente; múltiples goroutines compiten por el mismo domainChan, logrando un balance de carga natural:
./ksubdomain e -d example.com --interface eth0 --interface eth1 -b 20m
Al habilitar --predict, la herramienta predice posibles subdominios relacionados basándose en los ya descubiertos, aumentando la tasa de detección.
none: Sin filtro (por defecto)basic: Filtro básico, elimina IPs de comodín evidentesadvanced: Filtro avanzado, evalúa múltiples dimensiones# Integración con httpx para detectar servicios web activos
./ksubdomain e -d example.com -s --od | httpx -silent
# Integración con nuclei para escaneo de vulnerabilidades
./ksubdomain e -d example.com -s --od | nuclei -l /dev/stdin
# Procesamiento en flujo con JSONL, filtrado solo de registros A
./ksubdomain e -d example.com --format jsonl | jq -r 'select(.type=="A") | .domain'
# Múltiples dominios por lotes + deduplicación
./ksubdomain e --domain-list roots.txt -s --od | sort -u > all_subs.txt
macOS:
# El buffer BPF es pequeño, se recomienda limitar el ancho de banda
sudo ./ksubdomain e -d example.com -b 5m
WSL/WSL2:
# Normalmente se usa eth0
./ksubdomain e -d example.com --interface eth0
Windows:
# Requiere instalar Npcap y ejecutar 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, recolecta todos los resultados
results, err := scanner.Enum("example.com")
// Streaming con callback, procesa en tiempo real
err = scanner.EnumStream(ctx, "example.com", func(r sdk.Result) {
fmt.Printf("%s => %v\n", r.Domain, r.Records)
})
Consulte la documentación del SDK y la documentación de la API para más detalles.
# Pruebas unitarias (no requiere root)
go test ./pkg/...
# Pruebas de regresión (requiere root + red)
go build -o ksubdomain ./cmd/ksubdomain
sudo go test ./test/regression/... -tags regression -v -timeout 120s
Licencia MIT — consulte LICENSE para más detalles.
| Herramienta | Modo | Tiempo | Éxitos |
|---|
| KSubdomain | envío por tarjeta pcap | ~30 seg | 1397 |
| massdns | pcap/socket | ~3 min 29 seg | 1396 |
| dnsx | socket | ~5 min 26 seg | 1396 |
| Formato | Descripción | Caso de uso |
|---|
txt | dominio => registro, salida en tiempo real | Por defecto, para inspección manual |
json | JSON completo, se escribe al finalizar | Procesamiento por programa |
csv | Tabla CSV, se escribe al finalizar | Análisis de datos |
jsonl | Una línea JSON por registro, salida en tiempo real | Procesamiento en flujo, tuberías |