Dns クラスを使えばホスト名から IP アドレスを取得できた。だいぶ前に試したときは、遅過ぎて使いものにならなかった記憶があるけど、さて今回はどうか。
using System; using System.Diagnostics; using System.Net; using System.Threading.Tasks; namespace DnsLookupSample { internal class Program { static async Task Main(string[] args) { foreach (var hostName in args) { Console.WriteLine(hostName); { Console.WriteLine(nameof(Dns.GetHostAddressesAsync)); var sw = Stopwatch.StartNew(); var addresses = await Dns.GetHostAddressesAsync(hostName); sw.Stop(); foreach (var address in addresses) { Console.WriteLine(address); } Console.WriteLine($"{sw.ElapsedMilliseconds} ms"); } { Console.WriteLine(nameof(Dns.GetHostEntryAsync)); var sw = Stopwatch.StartNew(); var entry = await Dns.GetHostEntryAsync(hostName); sw.Stop(); foreach (var address in entry.AddressList) { Console.WriteLine(address); } Console.WriteLine($"{sw.ElapsedMilliseconds} ms"); } { Console.WriteLine(nameof(Dns.GetHostAddresses)); var sw = Stopwatch.StartNew(); var addresses = Dns.GetHostAddresses(hostName); sw.Stop(); foreach (var address in addresses) { Console.WriteLine(address); } Console.WriteLine($"{sw.ElapsedMilliseconds} ms"); } { Console.WriteLine(nameof(Dns.GetHostEntry)); var sw = Stopwatch.StartNew(); var entry = Dns.GetHostEntry(hostName); sw.Stop(); foreach (var address in entry.AddressList) { Console.WriteLine(address); } Console.WriteLine($"{sw.ElapsedMilliseconds} ms"); } } Console.WriteLine("Enter で終了"); Console.ReadLine(); } } }
.NET Framework 4.8 での実行結果。
今回試したら 200ms かからなかった。こんなに速かったっけ?当時はネットワークが不調だったんかな…。今回使う予定のツールなら 200ms で充分。NuGet でパッケージ探さずに済みそうだ。