查询 DNS 别名

9

我在msdn网站上找到了一些代码(如下所示),看起来它将返回给定服务器的所有DNS别名。我已经在控制台应用程序中实现了这段代码,这应该允许我输入一个服务器的主机名,并返回所有DNS别名。我输入了我们域中已知具有别名的服务器的主机名(我可以ping通主机和别名,它们都解析到相同的IP地址),但是这段代码没有找到别名。显然我的DNS别名理解和/或代码不足...请教育我...

static void Main(string[] args)
{
    Console.Write("Host? (Enter for local): ");
    string strHost = Console.ReadLine();
    if (strHost.Trim().Length == 0)
    {
        strHost = System.Net.Dns.GetHostName();
    }

    try
    {
        //System.Net.IPAddress hostIPAddress = System.Net.IPAddress.Parse(strHost);
        System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostByName(strHost);//.GetHostByAddress(hostIPAddress);
        // Get the IP address list that resolves to the host names contained in 
        // the Alias property.
        System.Net.IPAddress[] address = hostInfo.AddressList;
        // Get the alias names of the addresses in the IP address list.
        String[] alias = hostInfo.Aliases;

        Console.WriteLine("Host name : " + hostInfo.HostName);
        Console.WriteLine("\nAliases :");
        for (int index = 0; index < alias.Length; index++)
        {
            Console.WriteLine(alias[index]);
        }
        Console.WriteLine("\nIP address list : ");
        for (int index = 0; index < address.Length; index++)
        {
            Console.WriteLine(address[index]);
        }
    }
    catch (System.Net.Sockets.SocketException e)
    {
        Console.WriteLine("SocketException caught!!!");
        Console.WriteLine("Source : " + e.Source);
        Console.WriteLine("Message : " + e.Message);
    }
    catch (FormatException e)
    {
        Console.WriteLine("FormatException caught!!!");
        Console.WriteLine("Source : " + e.Source);
        Console.WriteLine("Message : " + e.Message);
    }
    catch (ArgumentNullException e)
    {
        Console.WriteLine("ArgumentNullException caught!!!");
        Console.WriteLine("Source : " + e.Source);
        Console.WriteLine("Message : " + e.Message);
    }
    catch (Exception e)
    {
        Console.WriteLine("Exception caught!!!");
        Console.WriteLine("Source : " + e.Source);
        Console.WriteLine("Message : " + e.Message);
    }

    Console.WriteLine("Any key to continue...");
    Console.ReadKey();
}
1个回答

13

对于DNS名称而言,只有在您查询的名称具有CNAME记录时,别名列表才会非空;然后,别名列表将为您提供所有必须解析以获取终极名称的CNAME。

考虑以下问题:

  • 不可能(即协议不支持)查找给定名称的所有CNAME。这是不可行的,因为它需要搜索整个全局DNS。
  • 别名可能不仅通过CNAME发生,也可以通过多个主机名具有相同的地址(A)记录而发生。在这种情况下,并不是一个别名另一个,而是它们都指向同一个IP地址。同样,该协议不支持查找IP地址的所有A记录(尽管反向查找可以找到一些记录)。

谢谢,现在我可以停止寻找不存在的答案了。 - tvanharp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接