有没有办法查询我们的内部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.".")); }
几点完整性:
如果你有访问你的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议。
dnscmd
导出区域数据:
dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone
CNAME
资源logging。