Phi*_*ove 13 domain-name-system windows-server-2003 cname-record internal-dns
有没有办法查询我们的内部 DNS 条目以发现指向特定服务器的所有 CNAME 条目?
编辑:我们是 Windows 环境,Server 2003。
小智 9
您没有指定您的环境是什么,但如果您使用的是 Unix,我认为 dig 和 grep 的组合应该可以工作。ns.example.com应该是您的名称服务器的主机名,example.com是您的主机所属的域,而 HOST 是您要为其查找所有 CNAME 记录的主机。这实际上是 grep 命令中的一个制表符,而不是字面意思<TAB>(您可能需要调整 grep 字符串)。
此外,您的名称服务器需要配置为允许区域传输,其细节将取决于实现。
dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是 Windows,则可以使用nslookup:
C:\> nslookup
> name ns.example.com
> ls -a example.com FILE
Run Code Online (Sandbox Code Playgroud)
这应该example.com将ns.example.com“知道”的域的所有记录输出到 FILE。然后,您可以使用任何您想要对文本文件进行排序的工具来查找相应的 CNAME。
或者使用这个未经测试(但看起来似乎正确)的 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."."));
}
Run Code Online (Sandbox Code Playgroud)
完整性的几点说明:
如果您可以访问您的 DNS 配置,那么发现这些数据就很简单了。但是,任何人都可以让 CNAME 指向您的服务器。你将无法追踪这些。
正如@wombie 指出的那样,您无法对 CNAMES 进行反向查找。CNAMES 没有 PTR 等价物,即使在那里可能只有一些记录存在。快速检查随机选择的域会显示 PTR 记录通常不会指向 A 记录。同样,对随机地址的 PTR 记录进行反向查找通常不会找到相应的 A 记录。
编辑:CNAME 不是给系统取别名的唯一方法。DNS 允许多个 A 记录指向同一个地址。这在功能上与添加 CNAME 相同,但方法不同。同样的问题适用于您的域之外。要搜索各种 A 记录,您需要搜索相关系统的 IP 地址。