2

DNS サーバーから入力された 1 つの 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 レコードがあることがわかっています (こちらを参照してください:ツールボックス | DNSstuff | 81.95.243.81 の DNS ルックアップ結果の逆引き) 。

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 に答える