C# でホスト名から IP アドレスを取得する

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 でパッケージ探さずに済みそうだ。