IPアドレスとホスト名(マシン名)の相互変換
|
41 |
IPFromToHostName |
動作確認 |
Delphi2007 |
更新日 |
2008/02/06(水) |
ネットワーク上に存在するIPアドレスから
そのマシン名というかホスト名を求めることができます。
以下のGetHostName関数を使ってください。
また、世の中にあるサーバーのホスト名
(例えば『www.google.co.jp』とか)
からIPアドレスを求めることができます。
以下のGetIpAddress関数を使ってください。
おそらくはWindowsがDNSから情報を取得していると
思いますが、WinSockを使っているので
その辺りは意識せずに使えます。
────────────────────
{-------------------------------
// IPアドレスからhost名を求める
備考: uses Winsockが必要
履歴: 2003/11/12
2006/04/04 若干簡単になるように修正
2008/02/06
inet_addrとWSAStartupの行を入れ替えた
//------------------------------}
function GetHostName(Ip : String) : String;
var
PH : PHostEnt;
InAddr: TInAddr;
WSADATA : TWSADATA;
begin
Result := '';
if Ip = '' then exit;
WSAStartup(MakeWord(1,1) , WSADATA); //MakeWord(1,1)=$0101
InAddr.S_addr := inet_addr(PChar(Ip));
PH := gethostbyaddr(@InAddr,4,PF_INET);
if PH = nil then Exit;
Result := string(ph^.h_name);
WSACleanup;
end;
//------------------------------
{-------------------------------
// host名からIPアドレスを求める
備考: uses Winsockが必要
履歴: 2006/04/04
//------------------------------}
function GetIpAddress(HostName : String) : String;
var
PH : PHostEnt;
InAddr: TInAddr;
WSADATA : TWSADATA;
begin
Result := '';
if HostName = '' then exit;
WSAStartup(MakeWord(1,1), WSADATA);
PH := gethostbyname(PChar(HostName));
if PH = nil then Exit;
InAddr := PInAddr(ph^.h_addr_list^)^;
Result := inet_ntoa(InAddr);
WSACleanup;
end;
//------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add( GetHostName('127.0.0.1') );
Memo1.Lines.Add( GetIpAddress(GetHostName('127.0.0.1')) );
Memo1.Lines.Add( GetIpAddress('www.yahoo.co.jp') );
Memo1.Lines.Add( GetIpAddress('www.google.co.jp') );
end;
────────────────────
参考────────────────────
[Delphi-ML:33669] Re: IP アドレス(?) からの変換
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=33669
[Delphi-ML:33662] Re: IPアドレス(?)からの変換
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/033/033662.html
こける Wired-Winsockを使ってみようぜ-3.住所と氏名 '97/11/23
http://www.asahi-net.or.jp/~nk2w-ishr/winsock3.htm
|