Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > как от DNS получить IP хоста


Автор: _hunter 27.10.2004, 14:24
собственно вопрос.

Автор: Alex 27.10.2004, 18:21
Код
uses winsock  
-------  
function IPAddrToName(IPAddr : String): String;  
var  
 SockAddrIn: TSockAddrIn;  
 HostEnt: PHostEnt;  
 WSAData: TWSAData;  
begin  
 WSAStartup($101, WSAData);  
 SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));  
 HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);  
 if HostEnt<>nil then  
 begin  
   result:=StrPas(Hostent^.h_name)  
 end  
 else  
 begin  
   result:='';  
 end;  
end;  


Пример использования:

Код
procedure TForm1.Button1Click(Sender: TObject);  
begin  
 Label1.Caption:=IPAddrToName(Edit1.Text);  
end;


Взято с Исходников.ru http://www.sources.ru

Автор: _hunter 27.10.2004, 18:58
спасибо, конечно,но мне наоборот нужно :)

Автор: p0s0l 27.10.2004, 19:55
Тогда HostEnt := gethostbyname(PChar(HostName));

Автор: Alex 27.10.2004, 20:00
Для получения IP нужно:
Код
uses winsock;

function HostToIP(Name: string): String;
var
 wsdata : TWSAData;
 hostName: array [0..255] of char;
 hostEnt : PHostEnt;
 addr : PChar;
begin
 Result:= '';
 WSAStartup($0101, wsdata);
 try
   GetHostName(HostName, SizeOf(hostName));
   StrPCopy(hostName, Name);
   hostEnt:= gethostbyname(hostName);
   if not Assigned(hostEnt             ) then Exit;
   if not Assigned(hostEnt^.h_addr_list) then exit;
   addr:= hostEnt^.h_addr_list^;
   if not Assigned(addr                ) then Exit;
   Result:= Format('%d.%d.%d.%d', [Ord(addr[0]), Ord(addr[1]), Ord(addr[2]), Ord(addr[3])]);
 finally
   WSACleanup;
 end
end;

Пример использования:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(HostToIp('alex-co.com.ru'));
end;

Автор: _hunter 28.10.2004, 12:03
может я неправильно понял, но gethostbyname() берет IP _локально_. и уж точно я не понял куда ему адрес DNS пихать

Автор: Alex 28.10.2004, 12:18
Цитата(_hunter @ 28.10.2004, 13:03)

может я неправильно понял, но gethostbyname() берет IP _локально_. и уж точно я не понял куда ему адрес DNS пихать

Ну, что ты непонял? Я дал тебе функцию, которой на вход подается имя в DNS, а она возвращает тебе IP.

Автор: _hunter 28.10.2004, 12:27
проблема в том, что функция берет IP из системы ( возможно опрашивает DNS домена ) и если его там нет, а адрес есть -- получим облом
+ а если я хочу опросить другой DNS (не домена / провайдера)?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)