これが実際に何をするのかについて、ドキュメントに適切な説明が見つかりません。
AレコードまたはCNAMEレコード、あるいはその両方の存在をチェックしますか?
私の理解では、.NET 4では、ホストが存在しない場合、これはSocketExceptionをスローします。これは、私のテストによって確認されています。
これが実際に何をするのかについて、ドキュメントに適切な説明が見つかりません。
AレコードまたはCNAMEレコード、あるいはその両方の存在をチェックしますか?
私の理解では、.NET 4では、ホストが存在しない場合、これはSocketExceptionをスローします。これは、私のテストによって確認されています。
これはによって返されるアドレスのリストです
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
そして、これらはnetwork-tools.com、DNSクエリから取得されたAレコードです。
Answer records
microsoft.com A 64.4.11.37
microsoft.com A 65.55.58.201
だから私はそれがAレコードを引っ張ると言うでしょう。
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
ます。
ここで明確にするために、MartinLiversageの答えが最も正しい答えです。APIは最初に、解決されるドメインのCNAMEレコードを見つけようとします。CNAMEレコードが見つかった場合、APIはCNAMEレコードから返されたドメインのAレコードを解決しようとします。解決されるドメインのCNAMEレコードがない場合は、ドメイン自体のAレコードを解決しようとします。
CNAMEレコードが存在することを検出するには、解決されたホスト名を入力ホスト名と照合します。例:
IPHostEntry iphostEntry = Dns.GetHostEntry(inputHostname);
if (iphostEntry.Hostname != inputHostname) {
Console.WriteLine("CNAME record exists pointing {0} to {1}", inputHostname, iphostEntry.Hostname);
Console.WriteLine("iphostEntry.AddressList values are the A record values of {0}", iphostEntry.Hostname);
} else {
Console.WriteLine("CNAME record does NOT exist for {0}", inputHostname);
Console.WriteLine("iphostEntry.AddressList values are the A record values of {0}", inputHostname);
}