2

我需要从我们的 DNS 服务器输入的单个 IP 地址中获取每条 CNAME 记录。
当我查找时:

[System.Net.Dns]::GetHostByAddress("81.95.243.81").Aliases

它只给了我相同的 8 个别名作为回报:

botexshop.dk
bisamba.dk
nordsoenoceanarium.dk
www.brandingcommunity.com
botexhome.dk
botexudstyr.dk
botexjylland.dk
marineacademy.dk

但我知道 IP 地址有超过 69 条 CNAME 记录(请看这里:Toolbox | DNSstuff | Reverse DNS Lookup Results for 81.95.243.81

为什么GetHostByAddress唯一总是返回相同的 8 个别名?以及如何获得所有 CNAME?

4

1 回答 1

0

System.Net.Dns 在很多方面都非常缺乏。我见过一些人甚至编写成熟的 DNS 解析器来获得他们需要的东西。

我知道这并不能完全回答你的问题,但是这个功能似乎可以完成工作,但是它非常脆弱并且依赖于 nslookup 所以 YMMV:

function get-dnsaliases($ip)
{
    $ip_rev = $ip -split '\.'
    [array]::reverse($ip_rev)
    $ip_rev = $ip_rev -join '.'
    $ptr_regex = "^`t" + [regex]::escape("$ip_rev.in-addr.arpa, type = PTR, class = IN")

    $responses = nslookup -d $ip

    $foundanswer = $null
    $aliases = @()

    foreach ($response in $responses)
    {
        if($foundanswer)
        {
            if($response -match "^`tname = (?<alias>.+)$")
            {
                $aliases += $Matches.alias
            }
        }
        elseif($response -match $ptr_regex)
        {
            $foundanswer = $true
        }
    }
    return $aliases
}
于 2013-01-13T05:15:06.537 回答