|
.NET TIPS
IPアドレス←→ホスト名を変換するには?[2.0のみ、C#、VB]
デジタルアドバンテージ 一色 政彦
2006/02/24 |
|
|
IPアドレスからホスト名を取得したり、逆にホスト名からIPアドレスを取得したりするには、Dnsクラス(System.Net名前空間)を使用する。
.NET Framework 1.xでこれを行うには、「TIPS:プログラムを実行しているマシンのホスト名を得るには?」でも紹介されているように、Dns.GetHostByAddressメソッド(=IPアドレスからホスト名を取得)もしくはDns.GetHostByNameメソッド(=ホスト名からIPアドレスを取得)を使用すればよい。
例えば、次のようなコードを実行すればよい。
using System;
using System.Net;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// IPアドレスからホスト名を取得する
string ipAddress = "192.168.0.102";
IPHostEntry hostInfo = Dns.GetHostByAddress(ipAddress);
Console.WriteLine(hostInfo.HostName);
// ホスト名からIPアドレスを取得する
string hostName = "dapc89";
IPHostEntry ipInfo = Dns.GetHostByName(hostName);
foreach (IPAddress ipInfoAddress in ipInfo.AddressList)
{
Console.WriteLine(ipInfoAddress);
}
// ▼筆者の環境での出力結果:▼
// dapc89.d-advantage.com
// 192.168.0.102
}
}
}
|
Imports System.Net
Module Module1
Sub Main()
' IPアドレスからホスト名を取得する
Dim ipAddress As String = "192.168.0.102"
Dim hostInfo As IPHostEnTry = Dns.GetHostByAddress(ipAddress)
Console.WriteLine(hostInfo.HostName)
' ホスト名からIPアドレスを取得する
Dim hostName As String = "dapc89"
Dim ipInfo As IPHostEnTry = Dns.GetHostByName(hostName)
Dim ipInfoAddress As IPAddress
For Each ipInfoAddress In ipInfo.AddressList
Console.WriteLine(ipInfoAddress)
Next
' ▼筆者の環境での出力結果:▼
' dapc89.d-advantage.com
' 192.168.0.102
End Sub
End Module
|
|
.NET Framework 1.x用のIPアドレス←→ホスト名を変換するサンプル・プログラム(上:C#、下:VB) |
しかしこれらのメソッドを.NET Framework 2.0上で利用すると、(エラーにはならないものの)次のような警告がコンパイル時に表示されてしまう(作成されたexeファイルは実行可能)。
'System.Net.Dns.GetHostByAddress(string)' は古い形式です: 'GetHostByAddress is obsoleted for this type, please use GetHostEntry instead. http://go.microsoft.com/fwlink/?linkid=14202' ……省略……
'System.Net.Dns.GetHostByName(string)' は古い形式です: 'GetHostByName is obsoleted for this type, please use GetHostEntry instead. http://go.microsoft.com/fwlink/?linkid=14202' ……省略……
|
|
Dns.GetHostByAddressメソッドとDns.GetHostByNameメソッドの.NET Framework 2.0上での警告 |
これは、これらのメソッドがすでに廃れたもの(obsoleted)であることを示している(これについては「TIPS:不要となった古いクラスやメソッドを残すには?」が参考になる)。つまり、.NET Framework 2.0でこのメソッドを利用することは推奨されていないことを意味する。上記の警告からも分かるように、これらのメソッドの代わりとしては、.NET Framework 2.0で新しく追加されたDns.GetHostEntryメソッドの使用が推奨されている。
そこで先ほどのDns.GetHostByAddressメソッドとDns.GetHostByNameメソッドをDns.GetHostEntryメソッドに書き換えて、.NET Framework 2.0に対応させたのが次のコードだ。
using System;
using System.Net;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// IPアドレスからホスト名を取得する
string ipAddress = "192.168.0.102";
IPHostEntry hostInfo = Dns.GetHostEntry(ipAddress);
Console.WriteLine(hostInfo.HostName);
// ホスト名からIPアドレスを取得する
string hostName = "dapc89";
IPHostEntry ipInfo = Dns.GetHostEntry(hostName);
foreach (IPAddress ipInfoAddress in ipInfo.AddressList)
{
Console.WriteLine(ipInfoAddress);
}
// ▼筆者の環境での出力結果:▼
// dapc89.d-advantage.com
// 192.168.0.102
}
}
}
|
Imports System.Net
Module Module1
Sub Main()
' IPアドレスからホスト名を取得する
Dim ipAddress As String = "192.168.0.102"
Dim hostInfo As IPHostEntry = Dns.GetHostEntry(ipAddress)
Console.WriteLine(hostInfo.HostName)
' ホスト名からIPアドレスを取得する
Dim hostName As String = "dapc89"
Dim ipInfo As IPHostEntry = Dns.GetHostEntry(hostName)
Dim ipInfoAddress As IPAddress
For Each ipInfoAddress In ipInfo.AddressList
Console.WriteLine(ipInfoAddress)
Next
' ▼筆者の環境での出力結果:▼
' dapc89.d-advantage.com
' 192.168.0.102
End Sub
End Module
|
|
.NET Framework 2.0用のIPアドレス←→ホスト名を変換するサンプル・プログラム(上:C#、下:VB) |
このコードでは、.NET Framework 2.0でコンパイルしても警告は表示されない。
ただしこのコードは同期処理(=メソッドの処理が完了するまで制御が戻らないため、ほかの操作ができない)になっているので、ネットワークが遅かったりすると、アプリケーション全体の動作が停止してしまう。それを避けるために非同期で同様の処理を実現するには、Dns.BeginGetHostEntryメソッドとDns.EndGetHostEntryメソッドを使えばよい。これらのメソッドを使った方法は本稿では割愛するが、詳しい利用方法については、MSDNの情報を参照してほしい。
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間