Cracka01/domain-monitor
GitHub: Cracka01/domain-monitor
自托管的 Web 域名监控工具,用于批量追踪疑似钓鱼域名并在其从不活跃转为上线时发出告警。
Stars: 0 | Forks: 0
# Domain 监控
一个用于监控列表中的相似/钓鱼域名,并在**非活跃**域名突然**上线**时获取通知的自托管 Web 工具。
专为蓝队、品牌保护和 CTI 工作流而构建,适用于上游检测器产生数千个候选域名,而您只有时间手动审查那些实际提供内容的域名的场景。


## 功能
- **批量导入** — 导入包含数千个域名的 CSV/TXT 文件;解析器兼容 URLs、多列 CSV(`;`, `,`, `\t`)、表头、空格和重复项。
- **HTTP 探测** — 发送真实的 `GET` 请求(先 HTTPS 后 HTTP),跟随重定向,将每个域名分类为 `ACTIVE` / `PARKED` / `4XX` / `5XX` / `UNREACHABLE`。停放检测会检查 HTML 中典型的交易市场/出售关键字(`godaddy`, `sedo`, `for sale`, 默认 nginx 页面等)。
- **DNS 解析** — 存储每个域名解析后的 IPv4 地址。
- **VirusTotal 集成**(可选) — 为每个域名查询 VT v3 API,对判定结果进行分类并直接链接到 VT 报告。内置的速率限制器遵守免费版 4 次请求/分钟的配额;24 小时的缓存避免了在重复运行时消耗配额。
- **每 N 小时自动复查**(默认为 `4`) — 在后台线程中运行,无需 cron。即使浏览器关闭也能持续运行。
- **非活跃 → 活跃状态转换** — 当以前失效的域名重新上线时,会被标记为 `NEW`,置顶到表格中,并以高亮警报的形式显示。
- **可过滤/排序的表格**、**CSV 导出**、单行复查/删除、持久化的 SQLite 存储。
- **单条命令即可启动**,无需 Docker、Redis 或任何外部服务。
## 快速开始
打开终端(`cmd`、PowerShell、bash 等)并运行:
```
git clone https://github.com/Cracka01/domain-monitor.git
cd domain-monitor
pip install -e .
python -m domain_monitor
```
这样就完成了。您的浏览器将会打开 。
下次您只需要运行最后一条命令:
```
python -m domain_monitor
```
### 替代方案:免克隆安装
```
pip install git+https://github.com/Cracka01/domain-monitor.git
python -m domain_monitor
```
## 用法
`python -m domain_monitor` 接受以下选项:
```
python -m domain_monitor # http://127.0.0.1:5000, opens browser
python -m domain_monitor --port 8080 # custom port
python -m domain_monitor --host 0.0.0.0 # expose on LAN (use with care)
python -m domain_monitor --no-browser # headless mode
python -m domain_monitor --data-dir ./data # store monitor.db in ./data
python -m domain_monitor --version
```
同时会安装一个 `domain-monitor` 控制台命令作为别名,因此 `domain-monitor --port 8080` 的作用完全相同。
Web UI 提供了所有功能:CSV 上传、手动检查、设置、CSV 导出。状态会持久化保存到数据目录(默认:`~/.domain-monitor/`)内的 `monitor.db` 中。
### 启用 VirusTotal
1. 在 创建一个免费帐户。
2. 从您的个人资料页复制 API key。
3. 在 Web UI 中打开 **⚙️ Settings → VirusTotal**,粘贴该 key,勾选 *Enable* 然后点击 **Save VT**。
4. 开始一次检查。该 key 仅本地存储在 SQLite 数据库中,除了发送给 `virustotal.com` 本身之外,绝不会记录或发送到任何地方。
## CSV 格式
只要每一行至少包含一个有效的域名,任何格式的内容都可以被接受。以下示例均可正常工作:
```
example.com
phishing-site.org
```
```
domain,first_seen,score
example.com,2026-05-15,0.92
mi-bank-impersonation.net,2026-05-16,0.88
```
```
Dominio;Target
example.com;myorg
phishing-site.org;myorg
```
协议类型(`http://`, `https://`)、路径、端口和首尾空格会被自动剥离。无效行和重复项将被静默跳过。
## 架构
```
┌──────────────┐ uploads ┌────────────────┐
│ Browser (JS) │ ──────────▶ │ Flask routes │
│ (templates) │ ◀────────── │ /api/* │
└──────────────┘ JSON └───────┬────────┘
│
┌──────▼─────────┐
│ Runner │ background threads
│ ┌──────────┐ │
│ │ HTTP+DNS │ │ ThreadPoolExecutor
│ │ Phase 1 │ │ (high concurrency)
│ └──────────┘ │
│ ┌──────────┐ │
│ │ VT │ │ sequential
│ │ Phase 2 │ │ + RateLimiter
│ └──────────┘ │
└──────┬─────────┘
│
┌──────▼─────────┐
│ SQLite (file) │
│ monitor.db │
└────────────────┘
```
单个 `domain-monitor` 进程即可运行所有内容:Flask 提供 UI 和 JSON API 服务,一个 `Runner` 管理工作线程,SQLite 负责持久化状态。
## 配置参考
| 设置 | 默认值 | 描述 |
| ---------------- | ------- | -------------------------------------------------------------- |
| Concurrency | 20 | 阶段 1 中的并行 HTTP 工作线程数 |
| Timeout | 10 s | 单次请求超时时间 |
| Auto-recheck | 4 h | 两次完整后台扫描之间的间隔 |
| VT enabled | off | 启用 VirusTotal 阶段 |
| VT API key | — | 本地存储在 `settings` 表中;可通过 **Clear key** 移除 |
| VT req/min | 4 | 速率限制上限(对于付费 VT 计划可提高) |
| VT cache | 24 h | 如果一个域名在此时间窗口内被查询过,则跳过 VT 查询 |
环境变量:
| 变量 | 用途 |
| -------------------------- | -------------------------------------------------------------------- |
| `DOMAIN_MONITOR_DATA_DIR` | 覆盖默认数据目录(`~/.domain-monitor`)。 |
## 安全说明
- 默认绑定到 `127.0.0.1`。*仅在*受信任的网络中,或在带有身份验证的反向代理后方,才使用 `--host 0.0.0.0`。
- VT API key 以明文形式存储在本地 SQLite 数据库中(该文件已被配置为 `.gitignore` 忽略)。请使用常规的文件系统权限保护数据目录。
- HTTP 探测器最多只读取每个响应的前 16 KiB 数据——它永远不会执行远程 JavaScript,也不是一个浏览器沙盒。
- 外发请求使用 `User-Agent: Mozilla/5.0 (compatible; DomainMonitor/0.1)`。如果需要标明来源,请在 `app.py` 中进行修改。
## 开发
```
git clone https://github.com/Cracka01/domain-monitor.git
cd domain-monitor
python -m venv .venv
. .venv/Scripts/activate # on Windows; use "source .venv/bin/activate" elsewhere
pip install -e ".[dev]"
domain-monitor --debug
```
Linting:
```
ruff check src
```
构建发布版本:
```
python -m build
# wheels 和 sdist 出现在 dist/ 中
```
## 路线图
- 当出现 `NEW` 状态转换时,提供可选的桌面通知。
- 添加预 DNS 过滤器,无需消耗 HTTP/VT 调用即可丢弃 NXDOMAIN 域名。
- WHOIS / 证书透明度信息富化。
- 带有身份验证的多用户模式。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
VirusTotal 是 Google LLC 的商标;本项目**未**与 VirusTotal 建立关联,也**未**获得其认可。
标签:Python, 品牌保护, 域名监控, 多模态安全, 威胁情报, 开发者工具, 数据可视化, 无后门, 逆向工具, 钓鱼防护