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