如果我在一台机器上配置了多个主机(la apache 的 VirtualHosts),我如何查找 IP 并找到所有配置为访问它的域?
例如,我有几个 Web 和电子邮件域连接到我的服务器。如何找到指向它的所有域?
甚至可能吗?
我拥有所有域的 DNS A 条目,而且我知道一些朋友的域指向我的服务器。我想看看我不认识的人是否也指向那里。(或者如果有人将他们的域重新指向其他地方,我可以从我的服务器中删除他们的“旧”网站。)
如果我在一台机器上配置了多个主机(la apache 的 VirtualHosts),我如何查找 IP 并找到所有配置为访问它的域?
例如,我有几个 Web 和电子邮件域连接到我的服务器。如何找到指向它的所有域?
甚至可能吗?
我拥有所有域的 DNS A 条目,而且我知道一些朋友的域指向我的服务器。我想看看我不认识的人是否也指向那里。(或者如果有人将他们的域重新指向其他地方,我可以从我的服务器中删除他们的“旧”网站。)
不是真的,不。这就是正向和反向 DNS 查找之间的区别。
正向查找是标准名称->IP 查找。所以,你必须提前知道所有的名字。
您想要的是进行 IP-> 名称查找,但以某种方式将您在 Apache 配置和 DNS 中应用的所有名称作为 A 记录(或 CNAMES 或其他)。
您可能会发现,进行反向查找(例如 dig @nameserver $ip -x)将返回拥有该网络块的人(可能是您的 ISP)提供给该 IP 的主机名。它可能有一个类似 45-23-45-231.big-isp.com 的名称,这对您来说意义不大。至关重要的是,只有一个反向记录,但可能有许多正向记录。
我想这归结为一个问题——反向区域如何知道正向区域中的任何记录?在大多数设置中,前向区域可供客户进行更改,但反向区域由网络块的所有者维护。这两个系统无需了解彼此的任何信息即可运行。
使用 DNS 协议本身是不可能的,因为通常
PTR
每个 IP 地址只有一个记录,即使可能有许多A
记录指向该 IP 地址。然而,一些公司(例如http://www.ip-adress.com/)已经设法编译包含您所追求的数据库,方法是存储整个 DNS 查找负载的结果,然后提供反向查询到他们自己的数据库。
但是,这些数据库不能确定,它们不能保证知道可能碰巧指向该 IP 的每个可能的域——它们只能记录他们实际查找的域名的 DNS 详细信息。
这样做的唯一方法是拥有要检查的域名的内容数据。
使用此内容,您可以开发一个递归脚本来搜索相对于您的 IP 的主机名(由于最终要检查的 CNAME 而递归)。
要获取某些域名合作伙伴的数据,您可以请求辅助并使用 dig -t axfr 获取 DATA。
我认为你是从错误的方向来的。除了 a) 为每个可能的域名查询现有的每个 DNS 服务器,然后存储结果或 b) 从您感兴趣的 DNS 服务器获取区域传输之外,DNS 无法做到这一点。
好吧,如果您正在运行基于名称的 Apache 虚拟主机,那么您已经有了一个可以访问您的服务器的域列表。除了默认的虚拟主机外,基于名称的虚拟主机只会回答其名称。因此,如果我将 foobar.com 指向我的盒子,并且没有 foobar.com 虚拟主机,它要么默认提供服务,要么没有得到应答(如果您没有默认服务器)。
Apache 有一些非常强大的日志功能。使用您想要的请求行定义自定义日志格式应该不是问题。此外,总是有引用者字段。
另一方面,邮件更让人痛苦。关于我能想到的最好的事情是从服务器日志中挑选你能做的事情,如果你真的需要知道,为 SMTP 设置一个数据包捕获。
您应该检查RobTex 不是最好的网页设计,但非常有用!您可以找出与 IP 关联的所有 DNS。
当然,正如 Alnitak 所解释的,
这意味着该网站只是一个包含大多数 DNS/IP 服务器的庞大数据库。这非常有效,但不是 100% 详尽无遗。