
Инструмент для перечисления поддоменов, асинхронные DNS-пакеты, использует pcap для сканирования 1600,000 поддоменов за 1 секунду.
English | Китайский
KSubdomain — это инструмент для перебора поддоменов, основанный на технологии без сохранения состояния, обеспечивающий беспрецедентную скорость сканирования и чрезвычайно низкое потребление памяти. Он использует сырые сокеты для прямого взаимодействия с сетевым адаптером, минуя стек протоколов ядра, а надёжный механизм повторной отправки с таблицей состояний гарантирует полноту результатов. Поддерживает Windows, Linux, macOS — идеальный выбор для масштабного обнаружения DNS-активов.
--interface для нескольких сетевых карт, суммирование пропускной способности, использование нескольких исходящих IP-адресовEnumStream/VerifyStream для обработки результатов в реальном времени4 ядра CPU, 5 Мбит/с пропускная способность, тест со словарём из 100 000 записей:
Перейдите на страницу Releases, чтобы загрузить последнюю версию для вашей системы.
Установка зависимостей:
libpcap-devgit clone https://github.com/boy-hack/ksubdomain.git
cd ksubdomain
# Рекомендуется внедрить номер версии через ldflags
go build -ldflags "-X github.com/boy-hack/ksubdomain/v2/pkg/core/conf.Version=v2.x.y" \
-o ksubdomain ./cmd/ksubdomain
Или используйте go install:
go install github.com/boy-hack/ksubdomain/v2/cmd/ksubdomain@latest
Примечание: Требуются права root /
CAP_NET_RAW(для работы с сырыми сокетами)
Использование:
ksubdomain [глобальные опции] <команда> [опции команды]
Команды:
enum, e Режим перебора: перебор поддоменов для основного домена
verify, v Режим проверки: проверка, разрешаются ли домены в списке
test Тестирование максимальной скорости отправки локальной сетевой карты
device Просмотр доступных сетевых интерфейсов
help, h Показать справку
Глобальные опции:
--help, -h Показать справку
--version, -v Вывести информацию о версии
Проверяет, есть ли у указанного списка доменов DNS-записи.
Опции:
--domain, -d Указать домен (можно повторять)
--filename, -f Читать список доменов из файла
--stdin Читать из стандартного ввода
--bandwidth, -b Ограничение пропускной способности, например 5m, 10m, 100m (по умолчанию 3m)
--resolvers, -r Указать DNS-серверы (по умолчанию встроенные)
--output, -o Путь к выходному файлу
--format, -f Формат вывода: txt (по умолчанию), json, csv, jsonl
--silent, -s Тихий режим, вывод только доменов (без баннера и логов)
--only-domain, --od Выводить только домены, без IP/записей
--retry Количество повторов, -1 для бесконечных повторов (по умолчанию 3)
--timeout Таймаут одного запроса в секундах (по умолчанию 6)
--interface, -e Указать сетевой интерфейс (можно повторять для параллельной работы)
--wildcard-filter Фильтрация wildcard-записей: none (по умолчанию), basic, advanced
--predict Включить режим предсказания поддоменов
--quiet, -q Не выводить результаты на экран (только в файл)
--color, -c Цветной вывод
# Проверка одного/нескольких доменов
./ksubdomain v -d www.example.com -d mail.example.com
# Чтение из файла, сохранение в txt
./ksubdomain v -f domains.txt -o output.txt
# Ввод через конвейер, пропускная способность 10M, тихий режим для передачи в downstream
cat domains.txt | ./ksubdomain v --stdin -b 10m -s --od | httpx -silent
# Расширенная фильтрация wildcard, вывод JSONL
./ksubdomain v -f domains.txt --wildcard-filter advanced --format jsonl -o output.jsonl
# Параллельная работа с несколькими интерфейсами (суммирование пропускной способности)
./ksubdomain v -f domains.txt --interface eth0 --interface eth1
Перебор поддоменов для указанного домена на основе словаря и алгоритма предсказания.
Опции:
--domain, -d Целевой основной домен (можно повторять)
--domain-list, --ds Файл со списком основных доменов
--filename, -f Путь к файлу словаря (по умолчанию встроенный словарь)
--use-ns-records Читать NS-записи домена и добавлять их в DNS-резолверы
(остальные опции как в режиме verify)
# Перебор одного домена (с использованием встроенного словаря)
./ksubdomain e -d example.com
# Указание файла словаря
./ksubdomain e -d example.com -f subdomains.txt -o result.txt
# Включение режима предсказания + расширенная фильтрация wildcard
./ksubdomain e -d example.com --predict --wildcard-filter advanced
# Пакетный перебор нескольких основных доменов
./ksubdomain e --domain-list roots.txt -b 10m --format jsonl -o result.jsonl
# Передача в httpx через конвейер
./ksubdomain e -d example.com --od -s | httpx -silent
# Тестирование максимальной скорости отправки сетевой карты
./ksubdomain test
# Просмотр доступных сетевых интерфейсов
./ksubdomain device
Нет необходимости вручную задавать --timeout: движок автоматически корректирует верхнюю и нижнюю границы таймаута на основе измеренного RTT (экспоненциально взвешенное скользящее среднее, EWMA α=0.125), эффективно снижая количество пропусков и избегая ненужного ожидания.
Повторное указание --interface позволяет использовать несколько сетевых карт для одновременной отправки пакетов. Несколько горутин совместно используют один domainChan для конкурентного потребления, что естественным образом обеспечивает балансировку нагрузки:
./ksubdomain e -d example.com --interface eth0 --interface eth1 -b 20m
При включении --predict инструмент на основе уже обнаруженных поддоменов предсказывает возможные связанные поддомены, повышая вероятность обнаружения.
none: без фильтрации (по умолчанию)basic: базовая фильтрация, исключение очевидных wildcard-IPadvanced: расширенная фильтрация, многофакторный анализ# Совместно с httpx для обнаружения живых веб-серверов
./ksubdomain e -d example.com -s --od | httpx -silent
# Совместно с nuclei для сканирования уязвимостей
./ksubdomain e -d example.com -s --od | nuclei -l /dev/stdin
# Потоковая обработка JSONL, извлечение только A-записей
./ksubdomain e -d example.com --format jsonl | jq -r 'select(.type=="A") | .domain'
# Пакетный перебор нескольких доменов + дедупликация
./ksubdomain e --domain-list roots.txt -s --od | sort -u > all_subs.txt
macOS:
# Буфер BPF мал, рекомендуется ограничить пропускную способность
sudo ./ksubdomain e -d example.com -b 5m
WSL/WSL2:
# Обычно используется eth0
./ksubdomain e -d example.com --interface eth0
Windows:
# Требуется предварительная установка Npcap, запуск от имени администратора
.\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",
})
// 阻塞式,收集所有结果
results, err := scanner.Enum("example.com")
// 流式回调,实时处理
err = scanner.EnumStream(ctx, "example.com", func(r sdk.Result) {
fmt.Printf("%s => %v\n", r.Domain, r.Records)
})
Подробнее см. документацию SDK и документацию API.
# Модульные тесты (без root)
go test ./pkg/...
# Регрессионные тесты (требуется root + сеть)
go build -o ksubdomain ./cmd/ksubdomain
sudo go test ./test/regression/... -tags regression -v -timeout 120s
MIT License — подробнее см. LICENSE
| Инструмент | Метод | Время | Успешно |
|---|
| KSubdomain | pcap отправка через сетевую карту | ~30 сек | 1397 |
| massdns | pcap/socket | ~3 мин 29 сек | 1396 |
| dnsx | socket | ~5 мин 26 сек | 1396 |
| Формат | Описание | Сценарий использования |
|---|
txt | домен => запись, вывод в реальном времени | По умолчанию, для ручного просмотра |
json | Полный JSON, запись после завершения | Для программного анализа |
csv | Таблица CSV, запись после завершения | Для анализа данных |
jsonl | Одна JSON-строка на строку, вывод в реальном времени | Потоковая обработка, конвейер |