
快速域名解析与子域名暴力破解工具,支持精准通配符过滤
快速上手 »
用法
·
工作原理
·
赞助
·
常见问题
puredns 是一款快速域名解析与子域名暴力破解工具,能够精准过滤通配符子域名及 DNS 投毒条目。
它基于强大的存根 DNS 解析器 massdns 执行批量查询。在带宽充足且使用良好公共解析器列表的前提下,只需数分钟即可解析数百万条查询。然而,massdns 的结果质量完全取决于公共解析器返回的答案,这些答案常因错误 DNS 响应和通配符子域名的误报而受到污染。
puredns 通过其通配符检测算法解决了这一问题。它能基于从一组可信解析器获取的 DNS 答案过滤通配符,并尝试通过验证从这些可信解析器获得的答案来规避 DNS 投毒。
觉得这个工具有用吗?⭐ 在 GitHub 上为我们点星支持一下!

|
如果我的工作为您带来了收益,请考虑成为赞助者!您将获得独特的福利! 这对我来说意义重大 ❤️,因为它能让我继续为社区免费工作。但无论如何,请放心,我的软件将始终免费开源供您使用。 |
Puredns 要求宿主机上安装 massdns。如果 massdns 二进制文件的路径已加入 PATH 环境变量,puredns 即可开箱即用。在大多数系统上,建议将 massdns 可执行文件复制到 /usr/local/bin。否则,您需要使用 --bin 命令行参数指定 massdns 二进制文件的路径。
以下命令适用于大多数基于 Debian 的系统。更多信息请参考官方编译指南。
git clone https://github.com/blechschmidt/massdns.git
cd massdns
make
sudo make install
您需要获取一份公共 DNS 服务器列表才能使用 puredns。请参考常见问题了解如何整理自己的可用服务器列表。
您可以下载预编译的二进制发布版。
或者,您可以轻松编译最新版本。首先确保系统已安装 Go——支持 Go 的最后两个主版本。有关安装说明,请参考官方Go 安装页面。然后运行以下命令:
go install github.com/d3mondev/puredns/v2@latest
请务必使用 puredns --help 查看完整的可用命令和选项列表。
如果当前工作目录中存在 resolvers.txt 文件,puredns 默认会使用它。否则,如果存在 ~/.config/puredns/resolvers.txt 或 ~/.config/puredns/resolvers-trusted.txt 文件,puredns 将自动将其用作解析器。如果这些选项均不存在,请使用 --resolvers 和 --resolvers-trusted 参数指定要使用的解析器。
指定可信解析器是可选的。默认情况下,puredns 仅使用 8.8.8.8 和 8.8.4.4。
以下是使用名为 all.txt 的字典文件暴力破解大量子域名的方法:
puredns bruteforce all.txt domain.com
您还可以通过 -d 选项同时暴力破解多个域名,该选项可加载包含域名的文本文件,而非在参数中指定单个域名:
puredns bruteforce all.txt -d domains.txt
您也可以解析包含在一个文本文件中的域名列表(每行一个)。
puredns resolve domains.txt
您可以通过标准输入传递要解析的域名列表:
cat domains.txt | puredns resolve
或者传递用于暴力破解的词列表:
cat wordlist.txt | puredns bruteforce domain.com
您还可以添加 -q 开关,仅输出找到的域名以便管道传输到其他工具:
cat domains.txt | puredns resolve -q | httprobe
您可以将以下信息保存到文件,以便在工作流程中重复使用:
puredns resolve domains.txt --write valid_domains.txt \
--write-wildcards wildcards.txt \
--write-massdns massdns.txt

在上述动图中,您可以看到 puredns 使用包含 10 万个最常见子域名的字典文件对 google.com 域名进行暴力破解的情景。
作为工作流程的一部分,puredns 会自动执行三个步骤:
puredns 利用 massdns 对所有域名和子域名执行批量解析。它通过标准输入将数据传递给 massdns,从而可以在需要时限制每秒查询数,并对生成的域名列表执行基本清理。
默认情况下,输入的域名会被转换为小写,并且只接受包含有效字符(本质上是 [a-z0-9.-])的条目。您可以使用 --skip-sanitize 标志禁用此功能。
此步骤之后,结果通常会被污染:一些公共解析器会返回错误的答案,而通配符子域名可能迅速膨胀结果。
然后,puredns 使用其通配符检测算法,从 massdns 结果文件中检测并提取所有通配符子域名根。
它将步骤 1 的 massdns 输出作为 DNS 缓存,以最小化需要执行的查询数量。为确保精确结果,它可能需要执行 DNS 查询来验证缓存结果。
您可以使用 --skip-wildcard 标志跳过此步骤。
为防止 DNS 投毒,puredns 最后一次使用 massdns,通过可信 DNS 解析器验证剩余结果。目前内部使用的可信解析器是 8.8.8.8 和 8.8.4.4。此步骤以较慢的速度执行,以避免触发可信解析器的限流。
您可以使用 --skip-validation 标志跳过此步骤。
此时,生成的结果文件应已清除通配符子域名和 DNS 投毒答案。
Trickest 在此维护了一份有效的解析器列表:https://github.com/trickest/resolvers
或者,您可以从 public-dns.info 获取公共解析器列表,然后使用 DNS Validator 项目确保只保留提供有效答案的解析器。
如果您的公共解析器向 puredns 提供错误信息(例如返回投毒回复),某些子域名可能因被过滤而丢失。提示: 避免使用来自互联网审查国家(如中国)的解析器。
一旦您有了自定义解析器列表,可以通过 -r 参数将其传递给 puredns,或将其放置在 ~/.config/puredns/resolvers.txt 文件中:
puredns resolve domains.txt -r resolvers.txt
默认可信解析器当前为 8.8.8.8 和 8.8.4.4。如果您确实想更改它们,还可以通过 --resolvers-trusted 参数指定自定义列表,或将其放置在 ~/.config/puredns/resolvers-trusted.txt 文件中。我已经做了大量测试来为 puredns 寻找最佳的可信解析器——如果您决定更改它们,请务必仔细验证结果,并使用 --rate-limit-trusted 调整速率限制。
puredns resolve domains.txt -r resolvers.txt --resolvers-trusted trusted.txt
Puredns 并不会简单地忽略包含 NXDOMAIN 的 DNS 答案。有时,这些 NXDOMAIN 答案中包含指向过期域名的有效 CNAME 记录。如果这些记录存在,它们可能指向一个未注册的域名,从而导致子域名接管。
如果您得到了无法解析到 IP 地址的域名,请检查它们是否包含感兴趣的 CNAME 记录:
dig @8.8.8.8 CNAME example.com
最可能的原因是 DNS 负载均衡——有时,每次独特的 DNS 查询都会得到不同的 IP 地址。这使得通过比较 DNS 记录来检测通配符子域名变得非常困难。
您可以指定 puredns 在通配符检测过程中为收集子域名的所有不同 IP 地址而执行的测试次数。默认次数为 3 次,这非常低。我见过一些域名负载均衡严重,需要超过 50 次查询才能返回虽然不完美但足够好的结果。
您可以尝试通过 --wildcard-tests 参数增加检测通配符子域名时执行的测试次数:
puredns resolve domains.txt --wildcard-tests 50
为了检测通配符,puredns 需要缓存找到的 DNS 答案。如果您的域名列表包含数亿条记录,并且存在大量通配符子域名,宿主机可能耗尽内存。但有一个简单的解决方案。
默认情况下,puredns 将所有域名放在一个批次中,以减少 DNS 查询次数和执行时间。如果内存受限,可以使用 --wildcard-batch 参数将域名分成多个较小的批次进行处理。对于 1GB RAM 的 VPS,我发现 1M 到 2M 个子域名是一个合理的批次大小。
puredns resolve domains.txt --wildcard-batch 1000000
Puredns 在其整个流程中不会去除重复项。如果输入文件包含重复项目(如相同的词或域名),puredns 将输出重复元素。您可以通过 sort -u 等工具确保提供给 puredns 的输入文件不包含重复项。
这很可能是因为所使用的公共解析器。其中一些解析器有时会返回与查询无关的答案,导致输出中出现随机域名。Puredns 目前不处理这种情况,需要用户自行清理输出以确保找到的域名符合预期范围。
public-dns.info 持续更新公共和免费 DNS 解析器列表。
DNS Validator 可用于整理您自己的公共 DNS 解析器列表。
all.txt 字典文件 Jhaddix 的标志性 all.txt 字典文件常用于子域名枚举。
shuffleDNS 是一个用 Go 编写的不错替代工具,它使用不同的算法处理通配符子域名。
您可以通过以下方式为 puredns 做出贡献:
您有一个很棒的新功能想法吗?或者发现了一个想要修复的 Bug?太棒了!欢迎在提交 Pull Request 之前提交一个议题进行讨论。
我不会接受针对琐碎更改(如错字修正、最佳实践、小修小补等)的 Pull Request。
本仓库中包含的任何解析器仅供参考。作者不对列表中解析器的任何误用负责。用户有责任整理一份有权使用的解析器列表。
未经同意使用此程序攻击目标是非法的。用户有责任遵守所有适用法律。开发者不承担任何责任,也不对本程序造成的任何误用或损害负责。请负责任地使用。
本仓库中的材料根据 GNU GPLv3 许可证授权。