なでしこ > Delphi > 戻る

サーバー名からIPアドレスを得る

 初期化したら手始めにサーバー名からIPアドレスを得てみましょう。
■サーバー名をIPアドレスに変換
  ┣PHostEnt型について

サーバー名をIPアドレスに変換

 普通、URLを指定するときに、IPアドレスを直接指定する人はいません。だいたいにして、「www.text2music.com」などのドメインを指定します。

サーバー名からIPアドレスを取得 サーバー名からIPアドレスを取得

 それでは、まずサーバー名からIPアドレスを取得する方法を覚えましょう。

function GetIpAddressStr(server: string): string;
var
  addr: u_long;
  phe: PHostEnt;
begin
  // サーバー名からIPアドレスを得る............(1)
  phe := gethostbyname(PChar(server));
  if phe = nil then
  begin
    // IPアドレスの指定があったか?............(2)
    addr := inet_addr(PChar(server));
    phe  := gethostbyaddr(@addr, 4, AF_INET);
  end;
  if phe = nil then
  begin
    Result := ''// 失敗
  end else
  begin
    // in_addr型から、xx.xx.xx.xx の文字列に変換する..(3)
    Result := inet_ntoa(PInAddr(phe.h_addr_list^)^);
  end;
end;

(1)の『gethostbyname()』関数でサーバー名からホスト情報を取得することができます。戻り値は、PHostEnt型です。PHostEnt型は以下で説明してます。

(2)は、(1)の『gethostbyname()』関数が失敗したときに別の方法でアドレスを取得します。『gethostbyaddr()』関数は、文字列で『192.168.1.1』などのように指定したときに、ホスト情報を取得するのです。

(3)の部分で、ホスト情報を、『xx.xx.xx.xx』の文字列に変換します。

PHostEnt型について

さて、ホスト情報を取得する場面で、PHostEnt型が出てきました。これは何かというと、PHostEnt型は、THostEnt型のポインタ型で、以下のように宣言されています。

  hostent = record
    h_name: PChar;
    h_aliases: ^PChar;
    h_addrtype: Smallint;
    h_length: Smallint;
    case Byte of
      0: (h_addr_list: ^PChar);
      1: (h_addr: ^PChar)
  end;
  THostEnt = hostent;

h_nameは一般的なサーバー名。

h_aliases は、ホストの別名が格納されている配列へのポインタです。別名のないコンピューターもあります。

h_addrtype は、要求したアドレスの種類を表します。通常は、AF_INET が格納されてます。

h_length はアドレスのサイズをバイト単位で表します。通常の IP であれば 4 バイト、IPv6 であれば 16 バイトとなります。

h_addr_list には、ネットワークアドレスの情報へのポインタの配列です。

→サーバー名からIPアドレスを取得



→トップへ →目次へ