我想找出给定域的所有子域。我发现了一个提示,告诉我使用以下选项挖掘权威名称服务器:
dig @ns1.foo.example example.com axfr
但这永远行不通。有谁有更好的想法/方法吗?
提示(使用 axfr)仅在您正在查询的 NS(示例中的
ns1.foo.example
)配置为允许来自您正在使用的 IP 的 AXFR 请求时才有效;这不太可能,除非您的 IP 配置为相关域的辅助 IP。
基本上,如果您不允许使用 axfr,则没有简单的方法可以做到这一点。这是故意的,因此唯一的解决方法是通过暴力破解(即
dig a.example.com
、dig b.example.com
,...),我不推荐这样做,因为它可能被视为拒绝服务攻击。
如果您无法从 DNS 获取此信息(例如您未获得授权),则另一种选择是使用 Wolfram Alpha。
stackexchange.com
)您将能够在那里看到子域列表。虽然我怀疑它没有显示所有子域。
您可以使用:
$ host -l example.com
在幕后,这使用了上面提到的
AXFR
查询。但您可能不被允许这样做。在这种情况下,您会收到一条 transfer failed
消息。
dig example.com soa
dig @ns.SOA.example example.com axfr
仅当您连接到域的 DNS 服务器并且为您的 IP 地址启用了 AXFR 时,您才能执行此操作。这是辅助系统用来从主系统加载区域的机制。在过去,这不受限制,但出于安全考虑,大多数主名称服务器都有一个白名单:辅助名称服务器+几个特殊系统。
如果您使用的名称服务器允许这样做,那么您可以使用 dig 或 nslookup。
例如:
#nslookup
>ls example.com
注意:由于 dig 和其他新工具已弃用 nslookup,因此某些版本的 nslookup 不支持“ls”,尤其是 macOS X 的捆绑版本。
免费的 robotex 工具可以让你做到这一点,但它们会让你首先输入域的 IP:
在 Windows 中
nslookup
命令是
ls -d example.com > outfile.txt
将子域列表存储在
outfile.txt
如今很少有域名允许这样做
如果 DNS 服务器配置正确,您将无法获取整个域。如果由于某种原因允许来自任何主机的区域传输,您必须向其发送正确的数据包才能发出该请求。我怀疑这就是你所包含的挖掘声明的作用。