[ VB.NET / C# ] ホスト名から IP アドレスを取得する ( Dns.GetHostEntry )

Pocket

ここでは、Dns.GetHostEntry メソッドを使用してホスト名から IP アドレスを取得するサンプルコードを掲載しています。また、DNS の解決にはネットワーク環境などにより処理時間が増えることもありますので、Dns.BeginGetHostEntry メソッドを使用して非同期に取得するサンプルも掲載してあります。

スポンサーリンク

ホスト名から IP アドレス、IP アドレスからホスト名を取得する

VB.NET

'Imports System.Net

    ' IPアドレスからホスト名を取得する
    Dim addr As IPHostEntry = Dns.GetHostEntry("127.0.0.1")
    Console.WriteLine(addr.HostName)

    ' ホスト名からIPアドレスを取得する
    Dim hostname As IPHostEntry = Dns.GetHostEntry("www.google.com")
    For Each ipAddr In hostname.AddressList
        Console.WriteLine(ipAddr)
    Next

C#

    // IPアドレスからホスト名を取得する
    IPHostEntry addr  = Dns.GetHostEntry("127.0.0.1");
    Console.WriteLine(addr.HostName);

    // ホスト名からIPアドレスを取得する
    IPHostEntry hostname = Dns.GetHostEntry("www.google.com");
    foreach(IPAddress ipAddr in hostname.AddressList) {
        Console.WriteLine(ipAddr);
    }
非同期でホスト名からIPアドレスを取得する

前述のサンプルのように同期的に取得すると DNS が解決されるまでの時間は次の処理を行うことができません。 最近ではあまり気にする必要もないかもしれませんが、低帯域の環境では非同期に取得したくなることもあります。下記は非同期にホスト名から IP アドレスを取得するサンプルコードになります。

VB.NET

Imports System.Net

Public Class DnsTest

    Private Shared _Entry As IPHostEntry

    Public Shared Sub Main()

        ' 非同期でホスト名からIPアドレスを取得する
        Dns.BeginGetHostEntry("www.google.com", _
                              New AsyncCallback(AddressOf GetHostEntryCallback), _
                              Nothing)

        Console.WriteLine("DNSが解決するまで待機")
        Console.ReadKey()

    End Sub

    ''' IPアドレスの取得が完了した場合に非同期で呼び出される
    Public Shared Sub GetHostEntryCallback(ByVal ar As IAsyncResult)

        ' IPアドレスの取得
        _Entry = Dns.EndGetHostEntry(ar)

        ' 出力
        For Each ipAddr In _Entry.AddressList
            Console.WriteLine(ipAddr)
        Next
    End Sub
End Class

C#

using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        private static IPHostEntry _Entry;

        static void Main(string[] args)
        {
            // 非同期でホスト名からIPアドレスを取得する
            Dns.BeginGetHostEntry("www.google.com", 
                                  new AsyncCallback(GetHostEntryCallback), 
                                  null);

            Console.WriteLine("DNSが解決するまで待機");
            Console.ReadKey();
        }

        /// IPアドレスの取得が完了した場合に非同期で呼び出される
        public static void GetHostEntryCallback(IAsyncResult ar)
        {
            // IPアドレスの取得
            _Entry = Dns.EndGetHostEntry(ar);

            // 出力
            foreach (IPAddress ipAddr in _Entry.AddressList)
            {
                Console.WriteLine(ipAddr);
            }
        }
    }
}
参考

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *