获取与IP关联的所有DNS记录



背景

以下代码返回给定别名或主机的IPv4地址:[System.Net.Dns]::GetHostAddresses('someDnsName').IPAddressToString

以下代码返回IP的主机名(CName(和别名:[System.Net.Dns]::GetHostByAddress('172.12.34.56')

因此,我希望任何在GetHostAddresses上返回IP的东西都会列在对GetHostByAddress的调用的HostName或Aliases下(或者至少是要列出的项目的FQDN(。即,我希望以下查询的结果返回真实的

cls
$name = 'someName'
$fqdn = [System.Net.Dns]::GetHostEntry($name).HostName 
$ip = [System.Net.Dns]::GetHostAddresses($fqdn).IPAddressToString
$result = [System.Net.Dns]::GetHostByAddress($ip) 
#this is the result I'd expect to be true
($result.HostName -eq $fqdn) -or ($result.Aliases -contains $fqdn)
#here's additional info to aid in sense checking
"Name: $name"
"FQDN: $fqdn"
"IP: $ip"
"Result: "
(" - HostName: {0}" -f $result.HostName)
" - Aliases: " 
($result | select -ExpandProperty Aliases) | %{("`t{0}" -f $_)}

然而,也有一些a唱片公司没有这样做。这可能是我对DNS的误解,我公司对DNS的错误配置(正是因为DNS异常,我才写这个脚本;我们在同一个IP上发现了2台服务器;所以我想检查其他服务器(,或者其他什么。。。

问题

有没有办法列出与给定IP地址相关的所有DNS名称?即使得从GetHostAddresses返回IP的任何东西都将被列在对返回的IP地址的反向查找的结果中?

在查看全局范围时,获取与给定IP地址关联的所有名称的确切列表是不可行的,因为任何DNS管理员都可以为其区域中的任何IP地址定义记录。例如,我可以很容易地定义一个指向stackoverflow.com IP地址198.252.206.16的A记录myoverflow.planetcobalt.net.

如果你将范围缩小到你的组织,那么不太可能。但是,您仍然需要在组织的DNS服务器上枚举所有正向查找区域,并检查每个A记录的地址。您找到的ServerFault问题的答案执行此区域枚举。不过,你需要DNS管理员权限。

这变得如此复杂的原因是,从技术上讲,正向和反向查找区域之间没有关系。任何A记录都没有任何PTR记录的技术要求(更不用说匹配的记录了(。你可以有两个记录

foo.example.com.             A    192.168.23.42

17.13.113.10.in-addr.arpa.  PTR  foo.example.com.

没有问题。或者多个没有PTR记录的A记录。或没有A记录的PTR记录。

微软的DNS服务器允许你将PTR记录与a记录相关联,但这只是一个方便的功能。同样,域名系统中没有对该关联的技术要求。

最新更新