boy-hack/ksubdomain

GitHub: boy-hack/ksubdomain

基于无状态设计和 pcap 的高性能子域名枚举工具,突破传统 DNS 扫描的性能瓶颈,实现每秒百万级查询。

Stars: 1177 | Forks: 162

# KSubdomain: 超快无状态子域名枚举工具 [![Release](https://img.shields.io/github/release/boy-hack/ksubdomain.svg)](https://github.com/boy-hack/ksubdomain/releases) [![Go Report Card](https://goreportcard.com/badge/github.com/boy-hack/ksubdomain)](https://goreportcard.com/report/github.com/boy-hack/ksubdomain) [![License](https://img.shields.io/github/license/boy-hack/ksubdomain)](https://github.com/boy-hack/ksubdomain/blob/main/LICENSE) **KSubdomain 是一款无状态子域名枚举工具,具备前所未有的扫描速度和极低的内存消耗。** 告别传统工具的瓶颈,体验闪电般的 DNS 查询,并依靠可靠的状态表重传机制确保结果的完整性。KSubdomain 支持 Windows、Linux 和 macOS,是大规模 DNS 资产发现的理想选择。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e755a643b9183741.gif) ## 🚀 核心优势 * **闪电般的速度:** 采用无状态扫描技术,直接操作网络适配器进行原始套接字(raw socket)数据包发送,绕过系统内核的网络协议栈,实现惊人的发包速率。使用 `test` 命令探测本地网络适配器的最大发送速度。 * **极低的资源消耗:** 创新的内存管理机制,包括对象池和全局内存池,显著减少内存分配和 GC 压力,即使在处理海量域名列表时也能保持低内存占用。 * **无状态设计:** 类似于 Masscan 的无状态扫描,不维护来自系统的状态表,而是构建轻量级状态表,从根本上解决了传统扫描工具的内存瓶颈和性能限制,以及无状态扫描丢包问题。 * **可靠的重传:** 内置智能重传机制,有效应对网络抖动和丢包,确保结果的准确性和完整性。 * **跨平台支持:** 完美兼容 Windows、Linux 和 macOS。 * **易于使用:** 简单的命令行界面,提供验证和枚举模式,内置常用字典。 ## ⚡ 性能亮点 KSubdomain 在速度和效率上远超同类工具。以下是在 4 核 CPU、5M 带宽网络环境下,使用 10 万字典进行的对比测试: | Tool | Mode | Method | Command | Time | Success | Notes | | ------------ | ------ | ------------ | -------------------------------------------------------------------------- | -------------- | ------- | ------------------------- | | **KSubdomain** | Verify | pcap network | `time ./ksubdomain v -b 5m -f d2.txt -o k.txt -r dns.txt --retry 3 --np` | **~30 sec** | 1397 | `--np` 禁用实时打印 | | massdns | Verify | pcap/socket | `time ./massdns -r dns.txt -t A -w m.txt d2.txt --root -o L` | ~3 min 29 sec | 1396 | | | dnsx | Verify | socket | `time ./dnsx -a -o d.txt -r dns.txt -l d2.txt -retry 3 -t 5000` | ~5 min 26 sec | 1396 | `-t 5000` 设置 5000 并发 | **结论:** KSubdomain 比 massdns **快 7 倍**,比 dnsx **快 10 倍**! ## 🛠️ 技术创新 (v2.0) KSubdomain 2.0 引入了多项底层优化,进一步挖掘性能潜力: 1. **状态表优化:** * **分片锁:** 取代全局锁,显著减少锁竞争,提高并发写入效率。 * **高效哈希:** 优化键值存储,均匀分布域名,提高查找速度。 2. **数据包发送优化:** * **对象池:** 复用 DNS 数据包结构,减少内存分配和 GC 开销。 * **模板缓存:** 针对相同的 DNS 服务器复用以太网/IP/UDP 层数据,减少冗余构建开销。 * **并行发送:** 多 goroutine 并行发包,充分利用多核 CPU 性能。 * **批处理:** 批量发送域名请求,减少系统调用和上下文切换。 3. **接收优化:** * **对象池:** 复用解析器和缓冲区,减少内存消耗。 * **并行处理流水线:** 接收 → 解析 → 处理 三级并行,提高处理流水线效率。 * **缓冲优化:** 增加内部 Channel 缓冲区大小,避免处理阻塞。 * **高效过滤:** 优化 BPF 过滤规则和数据包处理逻辑,快速丢弃无效数据包。 4. **内存管理优化:** * **全局内存池:** 引入 `sync.Pool` 管理常用数据结构,减少内存分配和碎片。 * **结构体复用:** 复用 DNS 查询结构和序列化缓冲区。 5. **架构和并发优化:** * **动态并发:** 根据 CPU 核心数自动调整 goroutine 数量。 * **高效随机数:** 使用性能更高的随机数生成器。 * **自适应速率:** 根据网络状况和系统负载动态调整发包速率。 * **批量加载:** 批量加载和处理域名,减少单个域名处理开销。 ## 📦 安装 ### 下载二进制文件 请从 [Releases](https://github.com/boy-hack/ksubdomain/releases) 页面下载对应系统的预编译二进制文件。 1. **下载:** 获取适合您操作系统(Windows、Linux、macOS)的最新版本。 2. **安装 `libpcap` 依赖:** * **Windows:** 下载并安装 [Npcap](https://npcap.com/)。 * **Linux:** 通常已预装。如未安装,请安装 `libpcap-dev` 或 `libcap-devel`。 * **macOS:** 已预装。 3. **授予执行权限:** `chmod +x ksubdomain` 4. **运行!** ### 从源码构建 确保已安装 Go 1.23+ 和 `libpcap` 环境。 ``` git clone https://github.com/boy-hack/ksubdomain.git cd ksubdomain go build -o ksubdomain ./cmd/ksubdomain ``` ## 📖 使用 ``` KSubdomain - Ultra-Fast Stateless Subdomain Enumeration Tool Usage: ksubdomain [global options] command [command options] [arguments...] Version: Check version: ksubdomain --version Commands: enum, e Enumeration mode: Provide root domain for brute-force verify, v Verification mode: Provide domain list for verification test Test local network adapter's maximum packet sending speed help, h Show command list or help for a command Global Options: --help, -h Show help (default: false) --version, -v Print version (default: false) ``` ### 验证模式 验证模式快速检查提供的域名列表的存活状态。 ``` ./ksubdomain verify -h # or ksubdomain v OPTIONS: --filename value, -f value Domain file path --domain value, -d value Domain --band value, -b value Bandwidth downstream speed, e.g., 5M, 5K, 5G (default: "3m") --resolvers value, -r value DNS servers (uses built-in DNS by default) --output value, -o value Output filename --output-type value, --oy value Output file type: json, txt, csv, jsonl (default: "txt") --silent Only output domains to screen (default: false) --retry value Retry count, -1 for infinite retry (default: 3) --timeout value Timeout in seconds (default: 6) --stdin Accept stdin input (default: false) --not-print, --np Don't print domain results (default: false) --eth value, -e value Specify network adapter name --wild-filter-mode value Wildcard filtering mode: basic, advanced, none (default: "none") --predict Enable domain prediction mode (default: false) --only-domain, --od Only output domains, no IPs (default: false) --help, -h Show help (default: false) # Examples: # Verify multiple domains ./ksubdomain v -d xx1.example.com -d xx2.example.com # Read domains from file and save to output.txt ./ksubdomain v -f domains.txt -o output.txt # Read from stdin with 10M bandwidth limit cat domains.txt | ./ksubdomain v --stdin -b 10M # Enable prediction mode with advanced wildcard filtering, save as CSV ./ksubdomain v -f domains.txt --predict --wild-filter-mode advanced --oy csv -o output.csv # JSONL format for tool chaining ./ksubdomain v -f domains.txt --oy jsonl | jq '.domain' ``` ### 枚举模式 枚举模式基于字典和预测算法,对指定域名下的子域名进行暴力枚举。 ``` ./ksubdomain enum -h # or ksubdomain e OPTIONS: --domain value, -d value Domain --band value, -b value Bandwidth downstream speed (default: "3m") --resolvers value, -r value DNS servers --output value, -o value Output filename --output-type value, --oy value Output type: json, txt, csv, jsonl (default: "txt") --silent Only output domains (default: false) --retry value Retry count (default: 3) --timeout value Timeout in seconds (default: 6) --stdin Accept stdin input (default: false) --not-print, --np Don't print results (default: false) --eth value, -e value Specify network adapter --wild-filter-mode value Wildcard filter mode (default: "none") --predict Enable prediction mode (default: false) --only-domain, --od Only output domains (default: false) --filename value, -f value Dictionary path --ns Read domain NS records and add to resolvers (default: false) --help, -h Show help (default: false) # Examples: # Enumerate multiple domains ./ksubdomain e -d example.com -d hacker.com # Use dictionary file ./ksubdomain e -d example.com -f subdomain.txt -o output.txt # Read from stdin with 10M bandwidth cat domains.txt | ./ksubdomain e --stdin -b 10M # Enable prediction with advanced wildcard filtering ./ksubdomain e -d example.com --predict --wild-filter-mode advanced --oy jsonl ``` ## ✨ 功能与技巧 * **自动带宽适配:** 只需使用 `-b` 指定您的公网下行带宽(例如 `-b 10m`),KSubdomain 会自动优化发包速率。 * **测试最大速率:** 运行 `./ksubdomain test` 测试当前环境下的理论最大发包速率。 * **自动网络适配器检测:** KSubdomain 自动检测可用的网络适配器。 * **进度显示:** 实时进度条显示 成功 / 已发 / 队列 / 已收 / 失败 / 耗时。 * **参数调优:** 根据网络质量和目标域名数量调整 `--retry` 和 `--timeout` 以获得最佳结果。当 `--retry` 为 -1 时,将无限重试直到所有请求成功或超时。 * **多种输出格式:** 支持 `txt`(实时)、`json`(完成时)、`csv`(完成时)、`jsonl`(流式)。通过 `-o` 和文件扩展名指定(例如 `result.json`)。 * **环境变量:** * `KSubdomainConfig`:指定配置文件路径。 ## 🔗 集成示例 ### 配合 httpx ``` ./ksubdomain enum -d example.com --od | httpx -silent ``` ### 配合 nuclei ``` ./ksubdomain enum -d example.com --od | nuclei -l /dev/stdin ``` ### 配合 nmap ``` ./ksubdomain enum -d example.com --od | nmap -iL - ``` ### 使用 JSONL 进行流式处理 ``` ./ksubdomain enum -d example.com --oy jsonl | \ jq -r 'select(.type == "A") | .domain' | \ httpx -silent ``` ### 在 Python 脚本中 ``` import subprocess import json result = subprocess.run( ['ksubdomain', 'enum', '-d', 'example.com', '--oy', 'jsonl'], capture_output=True, text=True ) for line in result.stdout.strip().split('\n'): data = json.loads(line) print(f"{data['domain']} => {data['records']}") ``` ### 在 Go 程序中 ``` import "github.com/boy-hack/ksubdomain/v2/sdk" scanner := sdk.NewScanner(&sdk.Config{ Bandwidth: "5m", Retry: 3, }) results, err := scanner.Enum("example.com") for _, result := range results { fmt.Printf("%s => %s\n", result.Domain, result.IP) } ``` ## 🌟 平台说明 ### macOS 用户 macOS 使用 BPF (Berkeley Packet Filter),默认缓冲区较小: ``` # Recommended: 5M bandwidth for stability sudo ./ksubdomain e -d example.com -b 5m # If buffer errors occur sudo ./ksubdomain e -d example.com -b 3m --retry 10 # System tuning (optional) sudo sysctl -w net.bpf.maxbufsize=4194304 ``` ### WSL/WSL2 用户 ``` # Usually use eth0 ./ksubdomain e -d example.com --eth eth0 # If network adapter is not up sudo ip link set eth0 up ``` ### Windows 用户 ``` # Must install Npcap driver first # Download: https://npcap.com/ # Run with administrator privileges .\ksubdomain.exe enum -d example.com ``` ## 📊 输出格式 ### TXT (默认) ``` www.example.com => 93.184.216.34 mail.example.com => CNAME mail.google.com api.example.com => 93.184.216.35 ``` ### JSON ``` { "domains": [ { "subdomain": "www.example.com", "answers": ["93.184.216.34"] } ] } ``` ### CSV ``` subdomain,type,record www.example.com,A,93.184.216.34 mail.example.com,CNAME,mail.google.com ``` ### JSONL (JSON Lines) - **新功能!** 🆕 ``` {"domain":"www.example.com","type":"A","records":["93.184.216.34"],"timestamp":1709011200} {"domain":"mail.example.com","type":"CNAME","records":["mail.google.com"],"timestamp":1709011201} ``` 非常适合流式处理和工具链组合! ## 🛡️ 安全与道德 **负责任地使用:** * 仅扫描您拥有或有权测试的域名 * 尊重目标系统和网络资源 * 遵守当地法律法规 * 本工具仅供安全研究和授权测试使用 ## 📚 文档 - [快速入门指南](./docs/quickstart.md) - [API 文档](./docs/api.md) - [最佳实践](./docs/best-practices.md) - [常见问题](./docs/faq.md) ## 💡 参考 * 原版 KSubdomain: [https://github.com/knownsec/ksubdomain](https://github.com/knownsec/ksubdomain) * 从 Masscan/Zmap 解析到实践: [https://paper.seebug.org/1052/](https://paper.seebug.org/1052/) * KSubdomain 无状态工具介绍: [https://paper.seebug.org/1325/](https://paper.seebug.org/1325/) ## 📜 许可证 KSubdomain 基于 MIT 许可证发布。详见 [LICENSE](LICENSE)。 ## 🙏 致谢 特别感谢所有贡献者和开源社区! **如果觉得有用,请给本项目点个 Star ⭐!** 由 KSubdomain 团队用 ❤️ 制作
标签:DNS枚举, EVTX分析, EVTX分析, GitHub, Go语言, KSubdomain, Pcap, Raw Socket, Spyse API, 主动侦察, 低内存消耗, 协议栈, 大规模扫描, 子域名枚举, 子域名爆破, 批量查询, 插件系统, 无状态扫描, 日志审计, 程序破解, 系统安全, 网络安全, 网络安全工具, 资产探测, 隐私保护