ホスト名かIPアドレスから別名も含めてホスト情報を得る
81 GetHostInfo 動作確認 Delphi2007 更新日 2008/02/06(水)

インターネットのホスト名やIPアドレスに対して
名前問い合わせをして、それの別名も含めて求める関数を作りました。

例えば『www.google.co.jp』を引数にして問い合わせると
    IPアドレス:66.249.89.107
    ホスト名:www.l.google.com
    ホスト別名:www.google.co.jp
    ホスト別名:www.google.com
という値が戻ってきます。

逆に『66.249.89.107』を引数にして問い合わせると
    IPアドレス:66.249.89.107
    ホスト名:jp-in-f107.google.com
という値が戻ってきます。

別名が無い場合ももちろんあります。
────────────────────
type
  THostInfo = record
    HostName: String;
    IPAddress: String;
    AnotherNames: array of String;
  end;
  
{-------------------------------
//  host名かIPアドレスからhost情報を求める
引数:       host名かIPアドレスを渡す
戻り値:     ホスト名/IPアドレス/ホスト別名
            ホスト別名は文字列の動的配列で戻るようになる
備考:       uses Winsockが必要
履歴:       2008/02/06
//------------------------------}
function GetHostInfo(NetworkName: String): THostInfo;
type PPChar=^PChar;
var
  PH : PHostEnt;
  InAddr: TInAddr;
  WSADATA : TWSADATA;

  ppc: PPChar;
begin
  Result.HostName := '';
  Result.IPAddress := '';
  SetLength(Result.AnotherNames, 0);
  if NetworkName='' then Exit;

  WSAStartup(MakeWord(1,1) , WSADATA);
  InAddr.S_addr := inet_addr(PChar(NetworkName));
  if InAddr.S_addr = INADDR_NONE then
  begin
    PH := gethostbyname(PChar(NetworkName));
  end else
  begin
    PH := gethostbyaddr(@(InAddr.S_addr), 4, AF_INET);
  end;

  Result.HostName := PH^.h_name;
  Result.IPAddress := inet_ntoa(PInAddr(PH^.h_addr_list^)^);

  ppc:=PPChar(PH^.h_aliases);
  while assigned(ppc^) do begin
    SetLength(Result.AnotherNames, Length(Result.AnotherNames)+1);
    Result.AnotherNames[Length(Result.AnotherNames)-1] := ppc^;
    inc(ppc);
  end;

  WSACleanUp;
end;
//------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
  HostInfo: THostInfo;
  s: String;
begin
  HostInfo := GetHostInfo(Edit1.Text);
  Memo1.Lines.Add(HostInfo.IPAddress);
  Memo1.Lines.Add(HostInfo.HostName);
  for s in HostInfo.AnotherNames do
  begin
    Memo1.Lines.Add(s);
  end;
end;
────────────────────

参考────────────────────
こける Wired-Winsockを使ってみようぜ-3.住所と氏名 '97/11/23
http://www.asahi-net.or.jp/~nk2w-ishr/winsock3.htm