~/dnsniffer/subdomains

免费子域名查找

搜索证书透明度日志中出现过的每一个主机名。列出某个域名下的全部子域名,或在所有顶级域中按子串匹配。

--模式
$
提示:搜索词会在主机名的任意位置匹配,包括点号。

输入一个域名以列出它的子域名,或切换到“包含”按子串搜索。

子域名查找工具回答一个问题:某个域名下存在哪些主机名。输入 example.com,就能得到我们在它下面见过的每一个完整主机名 - mail.example.comvpn.example.comstaging.api.example.com - 取自 288,919 个域名下的 1,490,626 个主机名

第二种模式是子串搜索:输入 grafana,就能得到任意域名、任意顶级域中包含该文本的全部主机名。两种模式读取同一份索引,数据来自公开的证书透明度日志,因此每一行都是证书颁发机构确实签发过的主机名。

# 工作原理

子域名搜索的工作原理

某个域名下的子域名
输入可注册域名,例如 example.com,它下面的整个命名空间会按序返回。主机名以标签反转的形式存储,因此这是一次键区间读取而不是全表扫描,表再大也依然很快。
子串匹配
包含模式会在主机名的任意位置匹配搜索词,点号也算在内,所以 api.stage 能找到 api.stage.example.com。不区分大小写。
至少三个字符
子串索引基于三字符片段构建。更短的搜索词用不上它,只会把整张表读一遍,所以服务端会直接拒绝,而不是默默接受。
层级过滤
层级指可注册域名之下的标签数量:mail.example.com 是 1,a.b.example.com 是 2。限制层级可以隐藏 ACME 验证和 CDN 留下的深层自动生成主机。
通用名称与颁发机构
每一行都带有该主机名所在证书的通用名称,以及签发它的机构。一张证书只有一个通用名称却可以有很多备用名称,因此同一张证书上的所有主机名会重复出现同一个通用名称。
通过 HTTP 发起同样的查询
GET /api/v1/subdomains/search?domain=example.com 以 JSON 返回同样的数据,支持同样的 tldmax_depth 参数。同一份数据还提供 MCP 工具。
# 示例

子域名搜索示例

查询返回什么
mail邮件基础设施:mail、webmail、mail-eu、smtp-mail。
vpn远程接入主机,通常是攻击者最先寻找的目标。
staging本不该公开暴露的预发布环境。
grafana拥有独立主机名的具名工具。
api.stage带点号的搜索词按原样匹配,因此能找到 api.stage.example.com。
internal名字标着内部、却持有公开可信证书的主机。

以上都在“包含”模式下运行。若想列出某个命名空间,请切换到“域名下的子域名”,并输入可注册域名,例如 example.com。

# 使用场景

子域名查找能用来做什么

攻击面梳理

证书透明度日志是公开的,枚举你子域名的人读的就是同一批日志。对自己的域名做一次同样的枚举,你就知道对方会发现什么:被遗忘的预发布主机、管理后台、还挂着证书的旧 VPN 设备。

发现影子 IT

给主机名签发证书的团队,等于把这个主机名写进了公开日志,无论有没有知会 IT。把域名下的所有名字列出来,就能看到没人报备过的服务。

漏洞赏金与渗透测试定界

测试范围通常只给一个域名。这里一次查询就把它变成主机名清单,并带上首次出现日期:上周才冒出来的主机,和存在多年的主机意义完全不同。

基础设施卫生

首次出现与最近出现说明主机名何时进入证书记录、又在何时最后一次续期。不再续期的主机,往往就是被人忘掉的主机。

# 数据

主机名从哪里来

只有一个来源:证书透明度。所有公开受信任的证书颁发机构都必须把签发的每一张证书写入只可追加的公开日志,而每张证书都会在通用名称和主题备用名称字段中列出它覆盖的主机名。我们持续读取这些日志,并保留其中的每一个主机名。

这正是它与字典扫描器的区别。暴力工具靠字典猜名字,再问 DNS 猜得对不对,因此只能找到有人想得到的名字。证书日志则是真实开通过的名字的记录,包括任何字典里都没有的那些。

  • 288,919 个域名、1,260 个顶级域下的 1,490,626 个主机名,并持续增长
  • 今天早上签发的证书,几分钟内即可搜索到
  • 通配符证书以字面量 * 标签保存,作为该命名空间正在使用的证据
# 边界

它不是什么

  • 它不是 DNS 解析器。这里列出的主机名只说明曾为它签发过证书,并不表示它今天能解析、上面有服务在监听,或者曾经可以从公网访问。
  • 它并不完整。没有公开受信任证书的子域名 - 纯内部名称、自签名主机、私有 CA 后面的一切 - 从不会进入透明度日志,所以这里也没有。任何基于证书的工具都看不到它们。
  • 目前还不是完整历史。该索引保存的是从实时日志开始捕获之后的主机名,而不是证书透明度的全部存档,因此单个域名的覆盖度会随着证书续期而逐渐加深。
# 常见问题

常见问题

? 如何找出一个域名的全部子域名?

选择“域名下的子域名”,输入可注册域名(例如 example.com)后回车。我们在它下面见过的每个主机名都会按序返回,并附带证书通用名称、颁发机构以及首次和最近出现日期,取自已索引的 1,490,626 个主机名。无需注册账号。

? 这个子域名查找工具免费吗?

免费。页面本身不需要账号。通过 HTTP 调用同样的搜索,也就是 /api/v1/subdomains/search,需要一个免费的 API 密钥,这样自动化调用才能被归属和限流。

? 它和子域名枚举工具有什么不同?

暴力枚举工具从字典里猜主机名,再逐个查询 DNS。这里读取的是证书透明度日志,也就是证书颁发机构确实签发过的名字的公开记录,因此能发现任何字典里都没有的名字。代价是反过来的:从未申请过公开证书的主机它看不到。

? 为什么搜索至少需要三个字符?

子串索引基于三字符片段构建,一两个字符的搜索词在其中匹配不到任何内容,查询就只能把一张为数十亿行设计的表整个读一遍。这个下限由服务端强制执行,不只是浏览器端的限制。

? 通用名称这一列是什么意思?

它是该主机名所在证书的通用名称字段。一张证书只有一个通用名称,却可以带上百个备用名称,因此共用同一张证书的所有主机名会重复显示同一个值。它告诉你这个主机来自哪一张证书。

? 包含通配符子域名吗?

包含。为 *.example.com 签发的证书会以字面量 * 标签保存并出现在列表中。它证明该命名空间正在使用,但不指明具体主机,这也正是那张证书所能说明的全部内容。

? 可以在脚本里执行子域名搜索吗?

可以。GET /api/v1/subdomains/search 接受 domain 或 q,以及 tld 和 max_depth,并以 JSON 返回与表格相同的字段。另外还有 MCP 服务器,AI 助手可以直接执行该查询。

? 数据有多新?

证书日志是持续读取的,因此主机名通常在证书签发后几分钟内就能被搜索到。覆盖范围是从开始捕获那天向前推进,而不是向后回溯整个存档,并会随着证书续期不断加深。