在DNS中查询服务器的CNAME


Answers:


6

您没有指定环境是什么,但是如果您使用的是Unix,我认为dig和grep的组合应该可以工作。ns.example.com应该是名称服务器的主机名,example.com是主机所在域的主机,而HOST是要为其查找所有CNAME记录的主机。这实际上是grep命令中的制表符,而不是字面意思<TAB>(您可能必须调整grep字符串)。

此外,还需要将您的域名服务器配置为允许区域传输,具体取决于实施情况。

dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'

或者,如果您使用的是Windows,则可以使用nslookup

C:\> nslookup
> name ns.example.com
> ls -a example.com FILE

这应该example.comns.example.com“知道” 域的所有记录输出到FILE。然后,您可以使用任何想要对文本文件进行排序的工具来查找相应的CNAMES。

或使用未经测试(但看起来正确)的perl 脚本

#!/usr/bin/perl

use Net::DNS;

($target, $zone) = @ARGV;

$res = new Net::DNS::Resolver;
foreach $rr ($res->axfr($zone)) {
     print $rr->name."\n" if (($rr->type eq "CNAME") && ($rr->rdatastr eq $target."."));
}

完整性的几点:

  • 正如@womble所说,CNAME没有等效的PTR记录。您必须通过对所有与主机A记录相对应的CNAMES区域信息进行排序,来使用一些上下文感知。
  • 这仅适用于您的DNS服务器(并且如果您有权查看区域信息)。无法为您的主机“跟踪”属于其他区域的CNAME。
  • 如@BillThor所述,除了CNAMES外,还有其他别名为主机名的方法。同样,您将需要一些上下文意识。

问题已更新,我们在Windows上。
PhilPursglove

4

如果您可以访问DNS配置,则发现此数据非常简单。但是,任何人都可以使CNAME指向您的服务器。您将无法追踪这些。

正如@wombie指出的那样,您无法对CNAMES进行反向查找。CNAMES没有等效的PTR,即使那里很可能只存在某些记录。快速检查随机选择的域将显示PTR记录通常不指向A记录。同样,对随机地址的PTR记录进行反向查找通常找不到相应的A记录。

编辑:CNAME不是别名系统的唯一方法。DNS允许多个A记录指向同一地址。从功能上讲,这与添加CNAME相同,但是方法不同。在您的域外也有同样的问题。要搜索各种A记录,您将搜索相关系统的IP地址。


3

DNS协议不允许您执行这种“反向”查找。您将需要脱离协议,例如使用kce提供的grep建议。


2

使用powershell:

检查您的Microsoft DNS服务器上的主名:

Get-WmiObject-名称空间'root \ MicrosoftDNS'-类MicrosoftDNS_AType-过滤器“ IPAddress ='xx.xx.xx.xx(IP)'”-计算机名称mydnsservername

从您的Microsoft DNS服务器获取该主机的所有cname:

Get-WmiObject-名称空间'root \ MicrosoftDNS'-类MicrosoftDNS_CNAMEType-过滤器“ primaryname ='来自第一个查询的主要名称以点终止。'” -ComputerName mydnsservername |选择所有者名称,primaryname


1
  1. 查找您的机器服务的所有区域。
  2. 对于每个区域,用于dnscmd导出区域数据:
    dnscmd a.ns.example.com / zoneexport zone.example.com此区域的某些文件名
  3. 在导出的文件中搜索CNAME指向目标域名的资源记录。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.