2012-06-06 126 views

回答

7

這是

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 

返回的地址的列表,這些都是A記錄從network-tools.com,DNS查詢拉。

Answer records 
microsoft.com  A 64.4.11.37 
microsoft.com  A 65.55.58.201 

所以我會說它確實拉A記錄。

+0

謝謝你的更好的答案。 –

+0

這是我用於DNS查詢的開源C#庫,http://www.codeproject.com/Articles/12072/C-NET-DNS-query-component,我從這個問題中找到http:// stackoverflow.com/questions/1061248/getting-ns-record-type-using-c-sharp-dns/1061268#comment12106649_1061268 – Despertar

+0

完美!一切都完美! –

4

Dns.GetHostEntry構建在Windows API之上,不直接使用DNS協議。如果啓用了IPv6,它將會調用getaddrinfo。否則,它會呼叫gethostbyaddr。這些功能可能使用本地%SystemRoot%\System32\drivers\etc\hosts文件,DNS甚至NETBIOS將主機名解析爲IP地址。使用DNS將主機名解析爲IP地址將使用CNAME記錄來查找A記錄。

您可以通過解析www.google.com來測試此功能,該功能至少現在具有指向www.l.google.com的CNAME記錄。使用Dns.GetHostEntry將從A記錄返回www.l.google.com的IP地址。

+0

對,所以你說它同時使用CNAME和A記錄,因爲它遵循CNAME記錄來查找A記錄。沒有找到任何A記錄會拋出SocketException? –

+0

我不確定CNAME部分。畢竟只有子域名使用CNAME映射到完全限定域名(ftp.domain.com CNAME domain.com)。然而,domain.com本身必須有一個A記錄,那麼如何與Dns.GetHostEntry(「domain.com」)一起使用呢?我只用兩個子域測試了GetHostEntry(),每個域都有一個指向不同服務器的A記錄,GetHostEntry返回了這些Ip,如果我更改了那些A記錄,我相信它會改變GetHostEntry()的結果。 Google.com是全球最繁忙的網站,所以我不認爲這是一個良好的一致性基準。 – Despertar

+0

@GregT:做一個小測試可能是回答你的問題的最好方法。我不確定如果有一個CNAME記錄不指向A記錄,getaddrinfo'如何表現。但是,'Dns.GetHostEntry'的源代碼是公開可用的,而且我可以看到一個套接字錯誤將被封裝在一個'SocketException'中。 –

相關問題