Jump to content


Photo

GetHostByName


  • Please log in to reply
5 replies to this topic

#1 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 638 posts
  • LocationCiudad de México

Posted 11 September 2015 - 09:19 AM

Hola al grupo, después de varios días de intentar y tratar recurro al último recurso

 

Necesito obtener la dirección IP de una dirección URL y he intentado con:

 

- IP Works, (IPInfo)

- INDY, (DNSResolver)

- GetHostByName

 

De IPWorks he probado el demo y corre bien, pero por alguna razón cuadno implemento el código en mi aplicación no resuelve, no se dispara el evento de resolver.

 

De INDY he probado con algunos ejemplos que he encontrado en internet y nada, simplemente no resuelvo.

 

Con GetHostByName he probado, movido tipos de datos y sigo sin obtenerlo.

 

Espero que alguien lo haya resuelto antes y pueda ayudarme.

 

Saludos

 

 


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 11 September 2015 - 10:27 AM


delphi
  1. function ObtenerIP(const HostName: string): string;
  2. var
  3.   WSAData: TWSAData;
  4.   R: PHostEnt;
  5.   A: TInAddr;
  6. begin
  7.   Result := IPNULL; // '0.0.0.0'
  8.   WSAStartup($101, WSAData);
  9.   R := Winsock.GetHostByName(PAnsiChar(AnsiString(HostName)));
  10.   if Assigned(R) then
  11.   begin
  12.     A := PInAddr(r^.h_Addr_List^)^;
  13.     Result := WinSock.inet_ntoa(A);
  14.   end;
  15. end;

Saludos.
  • 1

#3 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 638 posts
  • LocationCiudad de México

Posted 11 September 2015 - 10:44 AM

Hola Enecumene,

 

Revisando, en unos minutos te comento los resultados. Por el momento te agradezco infinitamente la ayuda.


  • 0

#4 seoane

seoane

    Advanced Member

  • Administrador
  • 1259 posts
  • LocationEspaña

Posted 11 September 2015 - 10:45 AM

Prueba con esto:


delphi
  1. uses
  2. Windows, Winsock;
  3.  
  4. function ObtenerIP(Nombre: AnsiString): String;
  5. var
  6. WSAData: TWSAData;
  7. Address: u_long;
  8. HostEnt: phostent;
  9. Addr: sockaddr_in;
  10. begin
  11. Result:= '';
  12. if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
  13. try
  14. // Compruebo si es una ip
  15. Address:= inet_addr(PAnsiChar(Nombre));
  16. if Address = INADDR_NONE then
  17. begin
  18. // Si no es una ip, intento resolver el nombre
  19. HostEnt:= gethostbyname(PAnsiChar(Nombre));
  20. if HostEnt <> nil then
  21. Address:= PInAddr(HostEnt.h_addr_list^)^.S_addr;
  22. end;
  23. if Address <> INADDR_NONE then
  24. begin
  25. Addr.sin_addr.S_addr:= Address;
  26. Result:= inet_ntoa(Addr.sin_addr);
  27. end;
  28. finally
  29. WSACleanup;
  30. end;
  31. end;

Por ejemplo:


delphi
  1. Writeln(ObtenerIP('www.delphiaccess.com'));

Saludos


  • 3

#5 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 638 posts
  • LocationCiudad de México

Posted 11 September 2015 - 11:08 AM

Ay Wero!!

 

Los Dioses siguen hablando.

 

Gracias!! reviso ahora mesmo y les aviso que onda (en mi trabajo no me dejan experimentar)


  • 0

#6 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 638 posts
  • LocationCiudad de México

Posted 11 September 2015 - 02:20 PM

Estimado Enecumene, tu función fue la buena. Por alguna razón la de Seoane no furuló pero la otra jaló a la perfección y a la primera.

 

Muchas gracias, me han resuelto un dolor de cabeza sin aspirina.

 

Saludos y enecumene,te debo un cartón!! tu dime a donde te lo mando.

 

- El cartón es para Enecumene, así que Poli, E-Go y Héctor favor de no acercarse a la gorra...


  • 1




IP.Board spam blocked by CleanTalk.