
서브도메인 열거 도구, 비동기 DNS 패킷, pcap을 사용하여 1초에 1600,000개의 서브도메인을 스캔합니다.
English | 한국어
KSubdomain은 무상태 기술 기반의 서브도메인 브루트포스 도구로, 전례 없는 스캔 속도와 낮은 메모리 사용량을 제공합니다. 원시 소켓을 사용하여 네트워크 어댑터를 직접 조작하고 시스템 커널 프로토콜 스택을 우회하며, 신뢰할 수 있는 상태 테이블 재전송 메커니즘을 통해 결과의 완전성을 보장합니다. Windows, Linux, macOS를 지원하며 대규모 DNS 자산 탐지에 최적의 도구입니다.
--interface를 반복하여 여러 네트워크 카드를 지정할 수 있으며, 대역폭을 합산하고 여러 송신 IP를 활용합니다.EnumStream/VerifyStream 콜백 API를 제공하여 결과를 실시간으로 처리합니다.4코어 CPU, 5M 대역폭, 10만 개 사전 테스트:
Releases 페이지에서 해당 시스템의 최신 버전을 다운로드하세요.
의존성 설치:
libpcap-dev 설치git 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 확인 모드: 도메인 목록의 DNS 해석 여부 확인
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 와일드카드 필터링: 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, 자동 모드로 다운스트림 도구와 연동
cat domains.txt | ./ksubdomain v --stdin -b 10m -s --od | httpx -silent
# 고급 와일드카드 필터링, 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
# 예측 모드 + 고급 와일드카드 필터링 활성화
./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: 기본 필터링, 명백한 와일드카드 IP 제거advanced: 고급 필터링, 다차원 종합 판단# 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, 실시간 출력 | 스트리밍 처리, 파이프 연동 |