divyadeepmishra/SubDomain_Enumeration_Tool
GitHub: divyadeepmishra/SubDomain_Enumeration_Tool
Wazwaan 是一款基于 Web 的子域名枚举工具,结合证书透明度被动查询与 DNS 暴力破解主动扫描,帮助安全研究人员发现并存活检测目标域名的隐藏子域。
Stars: 0 | Forks: 0
# Wazwaan - 子域名枚举工具
Wazwaan 是一个基于 Web 的子域名侦察工具。你只需提供一个域名(例如 `example.com`),它就能找出隐藏在其下的所有子域名——比如 `mail.example.com`、`api.example.com`、`dev.example.com` 等。
“Wazwaan”这个名字源于传统的克什米尔多道菜肴盛宴。这个比喻的意思是,每一个被发现的子域名就像是一道“菜肴”,被一一端到你面前。
本项目是作为**道德黑客与网络精通(Ethical Hacking & Network Mastery)**课程的一部分而开发的。
## 它的实际功能是什么?
当你输入一个域名时,Wazwaan 会执行两项操作:
### 1. 被动扫描(证书透明度)
它会查询一个名为 [crt.sh](https://crt.sh) 的公共数据库,该数据库记录了所有已签发的 SSL 证书。如果有人为 `staging.example.com` 创建了证书,它就会出现在这里。这被称为**被动**扫描,因为我们没有向目标发送任何流量——我们只是在查阅公开记录。
### 2. 主动扫描(DNS 暴力破解)
它会获取一个包含约 60 个常见子域名(例如 `www`、`mail`、`api`、`admin`、`dev`、`staging`)的列表,并尝试通过 DNS 逐一查找。如果 `admin.example.com` 解析到了一个 IP 地址,这就说明它是存在的。这被称为**主动**扫描,因为我们实际上发送了 DNS 查询请求。
在找到子域名后,它还会进行快速的**存活检查**——通过 HTTP 请求逐一 ping,以查看它们是否真正在提供网站服务。
### 两种模式
- **演示模式(Demo Mode)** —— 使用虚拟的模拟数据来模拟扫描。适合用于测试和演示。不会发起任何真实的网络请求。
- **实战模式(Live Mode)** —— 真正去查询 crt.sh 并执行真实的 DNS 查找。请仅对你拥有或已获得授权的域名使用此模式。
## 在应用中你能看到什么?
本应用共有 5 个页面:
| 页面 | 显示内容 |
|------|--------------|
| **扫描** (`/`) | 主页 —— 输入域名并开始扫描。以终端样式显示实时日志,并实时展示传入的结果。 |
| **结果** (`/results`) | 包含所有已发现子域名的完整表格,支持排序和筛选。还提供网络图谱视图。你可以将结果导出为 CSV 或 PDF。 |
| **仪表盘** (`/dashboard`) | 图表与统计 —— 每次扫描的子域名数量、存活与失效比例、最常见的前缀、扫描耗时趋势。 |
| **历史记录** (`/history`) | 保存在浏览器中的所有过往扫描记录。你可以重新加载任何一次以前的扫描记录或将其删除。 |
| **关于** (`/about`) | 解释子域名枚举的工作原理、技术栈以及法律与道德相关的注意事项。 |
## 技术栈
- **Next.js 16** (App Router) —— 同时处理前端和 API 的框架
- **React 19 + TypeScript** —— 构建 UI
- **Tailwind CSS 4** —— 负责样式,并在其基础上构建了自定义设计系统
- **Recharts** —— 用于仪表盘上的图表
- **jsPDF** —— 在客户端生成 PDF 报告
- **Node.js `dns.promises`** —— 用于实战扫描的内置 DNS 解析(无需外部依赖)
本项目没有使用数据库。扫描历史记录会保存在你浏览器的 `localStorage` 中。
## 如何运行
你的机器上需要安装 **Node.js**(18 或更高版本)。
```
# 1. Clone repo(或直接 cd 进入 project 文件夹)
cd SubDomain_Enumeration_Tool
# 2. 安装依赖
npm install
# 3. 启动 dev server
npm run dev
```
然后在浏览器中打开 **http://localhost:3000**。大功告成。
如果你需要构建生产环境版本:
```
npm run build
npm start
```
## 项目结构(核心部分)
```
SubDomain_Enumeration_Tool/
├── src/
│ ├── app/
│ │ ├── page.tsx ← Main scan page
│ │ ├── layout.tsx ← Root layout (fonts, nav, providers)
│ │ ├── globals.css ← All the styling (liquid glass design system)
│ │ ├── results/page.tsx ← Results table + network graph
│ │ ├── dashboard/page.tsx ← Charts and analytics
│ │ ├── history/page.tsx ← Past scans list
│ │ ├── about/page.tsx ← How it works + legal notice
│ │ └── api/scan/route.ts ← Backend API that does the actual scanning
│ │
│ ├── components/
│ │ └── MenuBar.tsx ← Navigation bar
│ │
│ ├── context/
│ │ └── ScanContext.tsx ← Shared state across pages (scan results, status)
│ │
│ └── lib/
│ ├── mockData.ts ← Fake subdomain data for demo mode
│ ├── scanHistory.ts ← Save/load scans from localStorage
│ ├── exportUtils.ts ← CSV and PDF export functions
│ └── wordlist.ts ← List of common subdomain prefixes for brute-force
│
├── package.json
├── tsconfig.json
├── next.config.ts
├── postcss.config.mjs
└── eslint.config.mjs
```
## 补充说明
- 设计采用了 **Liquid Glass** 美学风格 —— 具有背景模糊的半透明面板、镜面高光以及动态渐变背景。这些全部由 CSS 实现,没有使用任何相关第三方库。
- **默认开启演示模式(Demo mode)。** 你不需要连接互联网即可进行体验。
- 扫描历史记录保存在你的浏览器中。如果你清除了浏览器数据,这些记录也会随之消失。
- 实战扫描会使用 Google 的 DNS (`8.8.8.8`) 和 Cloudflare 的 DNS (`1.1.1.1`) 来解析子域名。
- 实战扫描利用 **Server-Sent Events (SSE)** 实时流式传输结果 —— 你可以看到子域名在被发现时立即出现,而不是等到最后一次性显示。
## ⚠️ 法律声明
请仅对你拥有或已获得书面测试授权的域名进行扫描。未经授权的扫描可能会触犯计算机犯罪法律(如美国的 CFAA、英国的 CMA、印度的 IT Act 等)。作为课程项目的一部分,本工具仅供**教育目的**使用。
标签:DNS解析, GitHub, MITM代理, Python, 子域名枚举, 实时处理, 开源项目, 无后门, 系统安全, 自动化攻击, 证书透明度