Преобразуем доменное имя в IP адрес
Материал из DRKB
(перенаправлено с «Как вычислить IP адрес компьютера?»)
Описывается функция, которая показывает, как вычислить 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