Преобразуем доменное имя в IP адрес

Материал из DRKB


Описывается функция, которая показывает, как вычислить IP адрес компьютера в интернете по его доменному имени.

Совместимость: Delphi 3.x (или выше)

Объявляем Winsock, для использования в функции


function HostToIP(Name: string; var Ip: string): Boolean;
var
  wsdata: TWSAData;
  hostName: array [0..255] of Char;
  hostEnt: PHostEnt;
  addr: PChar;
begin
  Result := False;
  WSAStartup($0101, wsdata);
  try
    GetHostName(hostName, SizeOf(hostName));
    StrPCopy(hostName, Name);
    hostEnt := GetHostByName(hostName);
    if Assigned(hostEnt) then
    begin
      if Assigned(hostEnt^.h_addr_list) then
      begin
        addr := hostEnt^.h_addr_list^;
        if Assigned(addr) then
        begin
          Ip := Format('%d.%d.%d.%d', [Byte(addr[0]), Byte(addr[1]), Byte(addr[2]), Byte(addr[3])]);
          Result := True;
        end;
      end;
    end;
  finally
    WSACleanup();
  end
end;


Вы можете разместить на форме EditBox, Кнопку и Label и добавить к кнопке следующий обработчик события OnClick:


procedure TForm1.Button1Click(Sender: TObject);
var
  IP: string;
begin
  if HostToIp(Edit1.Text, IP) then
    Label1.Caption := IP;
end;


Author: Lutfi Baran
Author: neutrino
Source: http://forum.vingrad.ru
ID: 03344
ID: 03348



А вот какой способ предложен для нахождения собственного IP рассылкой мастеров дельфи http://Subscribe.Ru/catalog/comp.soft.prog.mdelphi():

var
  WSAData: TWSAData;
  SockAddrIn: TSockAddrIn;
  Host: PHostEnt;
  // Эти переменные объявлены в Winsock.pas
begin
  if WSAStartup($101, WSAData) = 0 then
  begin
    Host := GetHostByName(@Localname[1]);
    if Host <> nil then
    begin
      SockAddrIn.sin_addr.S_addr := LongInt(plongint(Host^.h_addr_list^)^);
      LocalIP := inet_ntoa(SockAddrIn.sin_addr);
    end;
    WSACleanUp;
  end;
end;


Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03345