JustOne--一款类OneForAll的子域名收集工具
JustOne
子域名收集工具 | Subdomain Collection Tool
基于 Python 3.14 的现代化子域名收集工具,支持多源收集、爆破、置换扩展、存活验证、DNS 安全检测及接管风险检测。
功能
- 多源收集 — 12 个搜索引擎 + 3 个证书透明度日志 + 15 个开放数据集 + 5 个威胁情报
- 信息丰富 — 对已有结果补全 DNS 解析、HTTP 探测、CDN 识别、IP 地理/ASN 信息
- DNS 爆破 — 高并发词表爆破,递归深度扩展
- 子域置换 — 基于已有子域名生成变异候选(前缀/后缀/数字/连字符插入)
- 存活验证 — HTTP 异步批量检查 / DNS 并发解析(ThreadPool 200 并发)
- DNS 安全检测 — DNSSEC 状态、多解析器一致性对比(投毒/劫持检测)
- 接管检测 — DNS CNAME + HTTP 指纹双确认,预装 15 种服务指纹
- 代理支持 — 代理优先 → 直连回退,国内外双栈
- 输出格式 — CSV / JSON / TXT
快速开始
环境要求
- Python 3.14+
- 虚拟环境(推荐)
安装
git clone https://github.com/your/JustOne.git
cd JustOne
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
pip install typer rich requests dnspython loguru aiohttp pydantic tqdm
配置
复制环境变量模板并根据需要填写 API Key:
cp config/.env.example config/.env
部分模块需要 API Key 才能工作(FOFA、Hunter、Shodan、ZoomEye、VirusTotal 等),不配置则自动跳过。
使用
完整收集
# 默认流程:搜索引擎 + 证书 + 数据集 + 爆破 + 置换
python justone.py main example.com
# 跳过特定模块
python justone.py main example.com --no-brute
python justone.py main example.com --no-altdns
python justone.py main example.com --no-search
子域爆破
python justone.py brute example.com
python justone.py brute example.com -w wordlist.txt -c 1000
子域置换扩展
# 自动收集+爆破后置换
python justone.py altdns example.com
# 从已知子域名文件直接置换
python justone.py altdns example.com -i subdomains.txt
# 禁用特定置换规则
python justone.py altdns example.com -i subs.txt --no-number --no-insert
存活检查 & DNS 安全检测
# HTTP 存活检查(默认,aiohttp 异步 100 并发,推荐)
python justone.py check example.com
# DNS 检查(ThreadPool 并发,默认 200 并发)
python justone.py check example.com --dns
# DNS + CDN 识别(支持 CSV/TXT 文件输入)
python justone.py check -i results/collect_example.com.csv --dns --cdn
# 自定义 DNS / CDN 并发数
python justone.py check example.com --dns --cdn -dc 500 -cc 200
# DNS 安全检测(DNSSEC + 投毒/劫持检测)
python justone.py check example.com --dns-security
python justone.py check example.com --dnssec
# 从文件批量检查(支持 CSV 和 TXT 格式)
python justone.py check -i subdomains.txt --dns
python justone.py check -i results/collect_example.com.csv --dns
check 参数 |
说明 | 默认值 |
|---|---|---|
--dns |
使用 DNS 解析检查存活(并发) | HTTP 检查 |
--cdn |
执行 CDN 识别 | 关闭 |
--dns-security / --dnssec |
DNS 安全检测 | 关闭 |
-i, --input |
输入文件(支持 CSV / TXT) | — |
-dc, --dns-concurrent |
DNS 解析并发数 | 200 |
-cc, --cdn-concurrent |
CDN 识别并发数 | 100 |
子域信息丰富
对已有子域名结果进行 DNS 解析、HTTP 探测、CDN 识别和 IP 定位补全:
# 从 SQLite 数据库读取并丰富
python justone.py enrich results/result.sqlite3
# 指定表名
python justone.py enrich results/result.sqlite3 -t example_com
# 设置并发数
python justone.py enrich results/result.sqlite3 -c 200
子域接管检测
python justone.py takeover example.com
python justone.py takeover -i subdomains.txt
python justone.py takeover example.com --concurrent 50
输出选项
python justone.py main example.com -o results.csv # 指定输出路径
python justone.py main example.com -f json # 输出格式: csv/json/txt
未指定输出路径时,结果自动保存到 results/ 目录:
| 命令 | 默认文件名 |
|---|---|
main |
results/collect_域名.csv |
brute |
results/brute_域名.csv |
altdns |
results/altdns_域名.csv |
check |
results/check_域名.csv |
enrich |
results/result.sqlite3(读取已有数据库,原地更新) |
takeover |
results/takeover_域名.csv |
模块架构
justone.py ← Typer CLI 入口
config/
settings.py ← Pydantic BaseSettings 配置
logging.py ← loguru 日志
common/
module.py ← 同步模块基类 (requests)
async_module.py ← 异步模块 Mixin (aiohttp)
domain.py ← 域名解析
utils.py ← 工具函数 (匹配/代理/重试)
resolve.py ← DNS 批量解析
database.py ← SQLite 持久化
modules/
collect.py ← 收集调度器
brute.py ← DNS 爆破
altdns.py ← 子域置换
enrich.py ← 子域信息丰富(DNS/HTTP/IP 补全)
export.py ← CSV/JSON/TXT 导出
search/ ← 12 个搜索引擎
certificates/ ← crt.sh / CertSpotter / Censys
datasets/ ← 15 个开放数据集
dnsquery/ ← MX / NS / SOA / SPF / TXT 查询
intelligence/ ← Threat Intelligence (AlienVault / VirusTotal 等)
check/ ← HTTP / DNS / CDN / AXFR / 安全检测等
takeover/ ← 子域接管检测
data/ ← 词表、CDN 指纹、公共后缀列表
代理配置
config/.env:
PROXY_ENABLE=true
PROXY_POOL= http://127.0.0.1:10808 ,socks5://127.0.0.1:10809
三层代理策略:
| 层级 | 说明 | 协议 |
|---|---|---|
| HTTP 代理 | 所有 requests / aiohttp 请求走代理 | http:// |
| DNS 代理 | DNS-over-TCP 走 SOCKS5 绕过 GFW 污染 | socks5:// / socks5h:// |
| 浏览器代理 | Playwright(Google/Yahoo)走代理 | http:// / socks5:// |
行为:配置了代理则代理优先 → 失败回退直连;代理未运行时自动回退直连 DNS(仅告警一次),不会卡死。
测试
pytest # 全量测试
pytest tests/test_altdns.py # 单模块测试
pytest -k "test_dnssec" # 按关键字过滤
全量测试约 350+ 用例,7 个跳过为 API Key 缺失模块,属正常预期。
数据源
每个模块可通过命令行 --no-xxx 选择性关闭,或在 config/.env 中配置对应的 API Key。
| 类别 | 模块 |
|---|---|
| 搜索引擎 | Baidu, Bing, Google, Yahoo, Yandex, So, Sogou, Fofa, Hunter, Shodan, ZoomEye, GitHub |
| 证书 | crt.sh, CertSpotter, Censys |
| 数据集 | Anubis, Chinaz, Circl, Cloudflare, DNSDumpster, FullHunt, HackerTarget, IP138, LeakIX, NetCraft, PassiveDNS, RapidDNS, Robtex, SecurityTrails |
| 威胁情报 | AlienVault OTX, URLScan.io, ThreatBook, VirusTotal, ThreatMiner |
| DNS 查询 | MX, NS, SOA, SPF, TXT |
| IP 定位 | CDN 识别 / CIDR / ASN / ORG 查询 |
| 安全检测 | DNSSEC / 多解析器一致性 / 劫持检测 |
| 接管检测 | 15 种服务指纹 (GitHub Pages, AWS S3, Heroku, Vercel 等) |
| 信息丰富 | 对已有数据库结果补全 DNS 解析、HTTP 探测、CDN、IP 信息 |
致谢
本项目的模块架构和收集思路参考了 OneForAll — 一个优秀的子域名收集工具。

浙公网安备 33010602011771号