logiover/subdomain-finder
GitHub: logiover/subdomain-finder
通过 crt.sh 证书透明度日志实现无需 API key 的被动子域名枚举工具,适用于安全侦察、攻击面映射和资产盘点。
Stars: 0 | Forks: 0
# Subdomain Finder — 通过证书透明度 进行子域名枚举
[](https://apify.com/logiover/subdomain-finder)
[](https://apify.com/logiover/subdomain-finder)
[](https://apify.com/logiover/subdomain-finder)
[](https://apify.com/logiover/subdomain-finder)
[](https://apify.com/logiover/subdomain-finder)
### ▶️ [在 Apify 上运行 Subdomain Finder](https://apify.com/logiover/subdomain-finder)
通过公共的 **证书透明度 日志**(经由 [crt.sh](https://crt.sh))发现**任何域名的所有已知子域名** —— 这是一种**被动子域名枚举**方式,完全不会触碰目标自身的基础设施。只需一个根域名,就能返回**成百上千个不重复的子域名**,每一行都清晰列出**子域名**、根**域名**、可直接使用的 **url**、**通配符**标记以及证书的 **firstSeen / lastSeen** 日期。**无需浏览器、无需 API key、无需登录、无需第三方账户。**
这是一款快速、低成本的**攻击面映射**与**子域名发现**工具,适用于安全侦察、Bug Bounty、OSINT 和资产盘点。由于它读取的是组织已经发布到公共 CT 日志中的主机名,它能发掘那些字典永远猜不到的、被遗忘的影子、测试和开发主机 —— 且对目标**零直接接触**。你可以一次性传入整个根域名列表,在单次运行中完成所有枚举,还可以选择仅保留当前存活的主机,并将完整的子域名列表导出为 CSV、JSON 或 Excel 格式。
## 📊 输出内容(输出字段)
每个**不重复的子域名**占一行:
| 字段 | 描述 |
|---|---|
| `subdomain` | 已发现的完全限定子域名(转换为小写,去除了开头的 `*.`) |
| `domain` | 所属的根域名 |
| `url` | 方便使用的 `https://` URL —— 可直接接入状态检测器或技术栈探测器 |
| `isWildcard` | 如果该名称仅作为通配符证书(`*.x`)出现,则为 `true` |
| `resolvable` | 启用存活过滤时为 `true` / `false`;否则为 `null` |
| `firstSeen` | 该名称首次出现的证书生效日期(ISO 8601 格式,或为 `null`) |
| `lastSeen` | 该名称最新出现的证书生效日期(ISO 8601 格式,或为 `null`) |
| `discoveredAt` | 生成该行数据时的 ISO 8601 时间戳 |
## 💡 使用场景
- **安全侦察与渗透测试** — 在授权测试之前,无需探测目标即可映射出组织的完整外部**攻击面**。
- **Bug Bounty 与 OSINT** — 使用零直接接触的被动侦察方式枚举目标范围内的资产,然后将列表接入你的 pipeline。
- **攻击面管理** — 发掘你的团队可能已经遗忘了的、影子、测试或开发子域名。
- **资产发现与盘点** — 为你拥有或监控的任何域名构建并丰富完整的子域名清单。
- **SEO 与站点迁移** — 在重新设计或迁移前后,找到可能托管可索引内容的所有子域名。
- **品牌与威胁监控** — 通过 `firstSeen` 追踪子域名随时间的出现情况,捕捉新增或异常的主机名。
- **持续监控** — 定期重新运行,以便在签发新证书时捕捉到新的主机。
## 🚀 快速开始
有四种运行方式 —— 全部调用托管的 Actor,无需在本地运行。
### 1) Apify Console(无需代码)
1. 打开 Actor:**[apify.com/logiover/subdomain-finder](https://apify.com/logiover/subdomain-finder)**。
2. 点击 **Try for free**。
3. 输入一个或多个**根域名**(纯域名,例如 `apify.com`),然后点击 **Start**。
4. 打开 **Output** 标签页,将子域名列表导出为 CSV、JSON 或 Excel。
### 2) Apify CLI
```
npm i -g apify-cli
apify login
apify call logiover/subdomain-finder --input '{ "domains": ["apify.com"] }'
```
### 3) REST API (curl)
```
curl -X POST \
"https://api.apify.com/v2/acts/logiover~subdomain-finder/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "domains": ["apify.com", "example.com"], "maxResults": 2000 }'
```
### 4) apify-client (JavaScript & Python)
```
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('logiover/subdomain-finder').call({ domains: ['apify.com'], onlyResolvable: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((s) => s.url));
```
```
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("logiover/subdomain-finder").call(run_input={"domains": ["apify.com"]})
for s in client.dataset(run["defaultDatasetId"]).iterate_items():
print(s["subdomain"])
```
更多详细代码片段:**[examples/cli.md](examples/cli.md)** · **[examples/api-curl.md](examples/api-curl.md)** · **[examples/javascript.md](examples/javascript.md)** · **[examples/python.md](examples/python.md)**
## ⚙️ 输入参数
在 `domains` 中至少为 Actor 提供一个根域名。其他参数均为可选。
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| `domains` | array | `["apify.com"]` | 要枚举的根域名(例如 `apify.com`、`google.com`)。**不要**包含 `http://` 或路径 |
| `includeWildcards` | boolean | `false` | 保留仅作为通配符证书(`*.x`)出现的名称,并将其标记为 `isWildcard: true`。无论是否保留,开头的 `*.` 都会被去除 |
| `onlyResolvable` | boolean | `false` | 如果为 `true`,会对每个子域名进行 DNS 查询,仅保留当前存活的主机。速度较慢 —— 默认关闭 |
| `sortBy` | string (下拉菜单) | `name` | 对结果进行排序:`name` (A–Z)、`firstSeen`(最新证书优先)、`lastSeen`(最新证书优先) |
| `maxResults` | integer | `0` | **每个根域名**最多获取的不重复子域名数量。`0` = 不限制 |
| `proxyConfiguration` | object | Apify Proxy(自动) | Proxy 配置(已提供默认设置) |
**示例 —— 对多个目标进行批量侦察:**
```
{
"domains": ["apify.com", "google.com", "cloudflare.com"],
"includeWildcards": true,
"maxResults": 5000
}
```
## 📤 输出
结果存储在 Apify 数据集中(每个不重复的子域名占一行),可导出为 CSV、JSON、JSONL、Excel 或 XML,或通过 API 获取。
**数据条目示例:**
```
{
"subdomain": "affiliate.apify.com",
"domain": "apify.com",
"url": "https://affiliate.apify.com",
"isWildcard": false,
"resolvable": null,
"firstSeen": "2025-06-03T07:47:43",
"lastSeen": "2026-09-07T01:14:59",
"discoveredAt": "2026-07-06T12:00:00.000Z"
}
```
## 🔗 集成与自动化
- **定时任务** — 每日或每周重新枚举你的域名,并在签发证书时捕捉新的子域名。
- **Webhooks** — 在运行完成时向你的 endpoint 或 Slack 发送 POST 请求(例如,对最新发现的主机发出警报)。
- **Google Sheets** — 每次运行后自动将子域名清单同步到电子表格。
- **Zapier / Make / n8n / Pipedream** — 将最新的子域名列表直接接入你的侦察或资产管理工作流。
- **Apify API** — 从你自己的后端启动运行并拉取数据集,然后接入状态检测器或技术栈探测器。
## 📁 导出格式
CSV · JSON · JSONL · Excel (XLSX) · XML — 在控制台中一键导出,或者在 API 数据集 URL 中附加 `&format=csv`。使用 `&fields=subdomain&skipHeaderRow=1` 可以获取纯净的主机列表,每行一个。
## ❓ 常见问题解答
### Subdomain Finder 需要 API key 或登录吗?
不需要。它不需要 API key、无需登录,也不需要任何第三方凭证 —— 只需要一个 Apify 账户。它读取的是组织已经发布到公共证书透明度 日志中的主机名。
### 这是 crt.sh / CT-log API 的替代方案吗?
是的。它可以作为可靠的 **crt.sh / CT-log API 替代方案**:它会查询证书透明度 日志,清理并去重每一个证书主机名,然后返回结构化的数据行,包含可直接使用的 `url`、通配符标记以及首次/最新出现的日期 —— 无需你自己去构建 endpoint 请求。
### 通过证书透明度 进行子域名枚举合法吗?
该 Actor 仅读取组织已经发布到公共 CT 日志中的主机名 —— 不会与目标的基础设施发生任何接触。你有责任遵守 crt.sh 的条款和适用法律,并确保只对自己拥有或被授权评估的域名进行枚举。
### 这与 DNS 暴力破解工具有什么不同?
暴力破解工具是通过字典猜测名称,并主动查询目标的 DNS。而这款工具是**被动的**:它读取的是组织已经发布到公共 CT 日志中的名称,因此绝不会触碰目标 —— 而且它往往能发掘出字典根本猜不到的主机。为了实现完全覆盖,建议将被动 CT 枚举与主动工具结合使用。
### 它能找到多级子域名和通配符域名吗?
可以。证书中出现的任何深度的主机名(例如 `dev.api.example.com`)都会被返回。通配符证书(`*.example.com`)的开头 `*.` 总是会被去除;启用**包含通配符条目**选项,即可同时保留那些仅以通配符形式出现的名称,并标记为 `isWildcard: true`。
### 为什么有些子域名无法访问?
CT 日志是历史性的 —— 某张证书可能是为主机签发的,但该主机现在已经无法解析了。启用 **Only Resolvable** 即可运行 DNS 检查,仅保留当前可以解析的子域名,相关状态会记录在 `resolvable` 字段中。
### 我能获取多少个子域名?
这完全取决于目标本身。小型站点可能只返回寥寥几个名称;大型组织则会返回**成百上千个**不重复的子域名。除非你设置了**每个域名的最大结果数**,否则没有硬性上限。
### 我可以一次性枚举多个域名吗?
可以。在 `domains` 中传入一整个根域名列表,Actor 就会在一次运行中全部完成枚举,每个不重复的子域名占独立的一行。
### 如何将子域名导出为 CSV 或纯主机列表?
打开运行结果的 **Output** 标签页,点击 **Export → CSV**(或 XLSX/JSON)。如果只需获取纯主机列表,请仅请求 `subdomain` 列 —— 具体参见[示例](examples/api-curl.md)。
### 我该如何为 Bug Bounty 目标枚举子域名?
输入范围内的根域名,该 Actor 就会被动地从证书透明度 日志中提取所有主机名,在无需触碰目标的情况下为你提供一份资产列表。然后,将 `url` 列接入状态检测器或技术栈探测器,以优先确定存活的主机。
## 🧩 logiover 的相关 Actor
- **[Certificate Transparency Monitor](https://apify.com/logiover/certificate-transparency-monitor)** — 随时间追踪某个域名新签发的 TLS 证书。
- **[Website Tech Stack Detector](https://apify.com/logiover/website-tech-stack-detector)** — 检测主机运行的框架、CMS 和服务器(可将 `url` 列直接传给它)。
浏览完整的安全与侦察套件以及 180 多个 Actor:**[apify.com/logiover](https://apify.com/logiover)**。
📄 **仅限文档** — 本仓库不包含爬虫源代码。该 Actor 运行在 Apify 平台上。 ▶️ **运行地址:** [https://apify.com/logiover/subdomain-finder](https://apify.com/logiover/subdomain-finder)
基于 [MIT License](LICENSE) 授权 · © 2026 logiover
标签:Apify, ESC4, GitHub, OSINT, TShark, 子域名枚举, 实时处理, 攻击面映射, 数据可视化, 系统安全, 证书透明度, 逆向工具