ここでは、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); } } } }
参考