获取与某个 IP 关联的所有 DNS 记录
Get all DNS records associated with an IP
背景
以下代码 returns 给定别名或主机的 IPv4 地址:
[System.Net.Dns]::GetHostAddresses('someDnsName').IPAddressToString
下面的代码return是IP的主机名(CName)和别名:
[System.Net.Dns]::GetHostByAddress('172.12.34.56')
因此,我希望任何 return 是 GetHostAddresses
上的 IP 的任何内容都列在主机名或调用 GetHostByAddress
的别名下(或至少对于 FQDN)要列出的那个项目)。
即我希望以下查询的结果为 return true
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 名称?
也就是说,任何 return 来自 GetHostAddresses
的 IP 都将列在对 returned IP 地址的反向查找结果中?
当您查看全局范围时,获取与给定 IP 地址关联的所有名称的明确列表是不可行的,因为任何 DNS 管理员都可以为他们区域中的任何 IP 地址定义记录。例如,我可以轻松定义一个 A 记录 myoverflow.planetcobalt.net.
指向 whosebug.com
IP 地址 198.252.206.16.
如果您将范围缩小到您的组织,则不太可能。但是,您仍然需要在组织的 DNS 服务器上枚举 所有 正向查找区域并检查每个 A 记录的地址。您找到的 ServerFault question 的答案执行此区域枚举。不过,您需要 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记录。
Microsoft 的 DNS 服务器允许您将 PTR 记录与 A 记录相关联,但这只是一个方便的功能。同样,域名系统对此关联没有技术要求。
背景
以下代码 returns 给定别名或主机的 IPv4 地址:
[System.Net.Dns]::GetHostAddresses('someDnsName').IPAddressToString
下面的代码return是IP的主机名(CName)和别名:
[System.Net.Dns]::GetHostByAddress('172.12.34.56')
因此,我希望任何 return 是 GetHostAddresses
上的 IP 的任何内容都列在主机名或调用 GetHostByAddress
的别名下(或至少对于 FQDN)要列出的那个项目)。
即我希望以下查询的结果为 return true
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 名称?
也就是说,任何 return 来自 GetHostAddresses
的 IP 都将列在对 returned IP 地址的反向查找结果中?
当您查看全局范围时,获取与给定 IP 地址关联的所有名称的明确列表是不可行的,因为任何 DNS 管理员都可以为他们区域中的任何 IP 地址定义记录。例如,我可以轻松定义一个 A 记录 myoverflow.planetcobalt.net.
指向 whosebug.com
IP 地址 198.252.206.16.
如果您将范围缩小到您的组织,则不太可能。但是,您仍然需要在组织的 DNS 服务器上枚举 所有 正向查找区域并检查每个 A 记录的地址。您找到的 ServerFault question 的答案执行此区域枚举。不过,您需要 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记录。
Microsoft 的 DNS 服务器允许您将 PTR 记录与 A 记录相关联,但这只是一个方便的功能。同样,域名系统对此关联没有技术要求。