Dns.GetHostEntry方法(String)实际上做了什么?

Gre*_*arr 7 .net c# dns host system.net

我在文档中找不到任何适当的描述.

它是否检查A记录或CNAME记录是否存在?

我的理解是,在.NET 4中,如果主机不存在,则抛出SocketException,并且我的测试证实了这一点.

Des*_*tar 8

这是返回的地址列表

var ips = System.Net.Dns.GetHostEntry("microsoft.com").AddressList;
foreach (var ip in ips)
    Console.WriteLine(ip);

// output
64.4.11.37
65.55.58.201
Run Code Online (Sandbox Code Playgroud)

这些是从network-tools.com,DNS查询中提取的A记录.

Answer records
microsoft.com       A   64.4.11.37  
microsoft.com       A   65.55.58.201
Run Code Online (Sandbox Code Playgroud)

所以我说它确实拉了A记录.


Mar*_*age 6

Dns.GetHostEntry是在Windows API之上构建的,并且不直接使用DNS协议。如果启用了IPv6,它将调用getaddrinfo。否则它将调用gethostbyaddr。这些功能可以使用本地%SystemRoot%\System32\drivers\etc\hosts文件,DNS甚至是NETBIOS将主机名解析为IP地址。使用DNS将主机名解析为IP地址将使用CNAME记录来查找A记录。

您可以通过解决以下问题www.google.com来进行测试:至少现在至少有一个指向的CNAME记录www.l.google.com。使用Dns.GetHostEntry将从A记录中返回IP地址www.l.google.com