查询服务器的CNAME的DNS

有没有办法查询我们的内部DNS条目来发现指向特定服务器的所有CNAME条目?

编辑:我们是一个Windows环境,Server 2003。

你没有指定你的环境是什么,但是如果你使用的是Unix,我认为dig和grep的组合应该可以工作。 ns.example.com应该是您的域名服务器的主机名, example.com是您的主机所属的域,而HOST是您希望查找所有CNAMElogging的主机。 这实际上是grep命令中的制表符,而不是字面上的<TAB> (您可能需要调整grepstring)。

你的域名服务器也需要configuration为允许区域传输,其中的细节将取决于实现。

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

或者如果你在Windows上,你可以使用nslookup :

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

这应该将ns.example.com “知道的”域的example.com所有logging输出到FILE。 然后,您可以使用您想要的任何工具通过文本文件进行sorting查找相应的CNAMES。

或者,这个未经testing (但看起来正确)的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的logging。 您必须通过对CNAMES的所有区域信息进行sorting来使用一些上下文感知,这些信息对应于主机的Alogging。
  • 这只适用于您的DNS服务器(如果您有权限查看区域信息)。 没有办法为属于其他区域的主机“追踪”CNAMES。
  • 正如@BillThor所述,除了CNAMES之外,还有其他方法可以将主机名称别名。 同样,你需要一些情境意识。

如果你有访问你的DNSconfiguration,发现这个数据是相当微不足道的。 但是,任何人都可以有一个CNAME指向你的服务器。 你将无法追查这些。

正如@wombie指出的,你不能对CNAMES进行反向查找。 CNAMES没有PTR的等价物,即使有可能只有一些logging存在。 快速检查随机select的域将显示PTRlogging通常不会指向Alogging。 同样,对PTRlogging进行随机地址的反向查找通常不会find相应的Alogging。

编辑:CNAME不是别名系统的唯一方法。 DNS允许多个Alogging指向相同的地址。 在function上,这与添加CNAME相同,但方法不同。 同样的问题适用于您的域外。 要search各种Alogging,您需要search相关系统的IP地址。

DNS协议不允许你做这种“反向”查询。 您将需要脱离协议,例如使用由kce提供的grepbuild议。

  1. 查找您的机器提供的所有区域。
  2. 对于每个区域,使用dnscmd导出区域数据:
      dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone 
  3. 在导出的文件中search指向目标域名的CNAME资源logging。