
サブドメイン列挙ツール、非同期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 検証モード: ドメインリストが解決されるか確認
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 を繰り返し指定することで、複数のネットワークカードを使用して同時にパケットを送信できます。複数の goroutine が同じ domainChan を共有して競合消費することで、自然に負荷分散が実現されます:
./ksubdomain e -d example.com --interface eth0 --interface eth1 -b 20m
--predict を有効にすると、ツールは発見されたサブドメインに基づいて存在する可能性のある関連サブドメインを予測し、発見率を向上させます。
none: フィルターなし(デフォルト)basic: 基本フィルター、明らかなワイルドカード IP を除去advanced: 高度フィルター、複数の次元から総合的に判断# httpx と連携して生存 Web を検出
./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 | 1行1JSON、リアルタイム出力 | ストリーム処理、パイプライン連携 |