PDA

Ver la Versión Completa : Convertir IP al nombre relacionado y viceversa


arima
04-07-2006, 22:27:51
Buenas queridos amigos espero recibir su pronta ayuda y de paso despejar esta duda que me carcome la cabeza.

La verdad desearia que alguien me diga como puedo introducir por decir algo un numero IP en una caja de texto y que mi aplicacion me devuelva el nombre asociado a este IP. por ejemplo: si coloco el IP 64.233.187.99, el sistema me devuelva el nombre asociado que en este caso seria www.google.com (http://www.google.com)

gracias de anteman o:)

[Gunman]
05-07-2006, 00:57:56
Si no me equivoco de eso se encargan los servidores DNS. Busca en el google. Los servidores DNS llevan asociado el dominio a la dirección IP.

dec
05-07-2006, 15:35:49
Hola,

En este enlace (http://piechnat.iglu.cz/tools/simpletcp/simpletcp.html) puede contrarse la unidad "SimpleTcp" escrita por Piechnat (http://piechnat.prv.pl). En dicha unidad existen dos funciones que no sé porqué a mí no me van bien, pero, que, puede que a ti te vayan bien, o, cuando menos, te da alguna que otra idea:


uses
WinSock;

function HostToIP(Host: string): string;
var
He: PHostEnt;
InAddr: TInAddr;
begin
Result := '';
He := gethostbyname(PChar(Host));
if He <> nil then
begin
Move(He^.h_addr_list^^, InAddr.S_addr, He^.h_length);
Result := string(inet_ntoa(InAddr));
end;
end;

function IPToHost(IP: string): string;
var
He: PHostEnt;
Addr: Integer;
begin
Result := IP;
Addr := inet_addr(PChar(IP));
He:= gethostbyaddr(@Addr, SizeOf(Addr), AF_INET);
if He <> nil then Result := He^.h_name;
end;

OSKR
05-07-2006, 15:46:48
Pues es verdad, eso lo hace el DNS, si este no encuentra la dirección entonces la mandará afuera ligando exito (claro está, si está configurado para hacer esto), por ejemplo en www.google.com.ve (http://www.google.com.ve) será consultado en dominio "ve" q ubicación tiene su .com y a este se le preguntará a q dirección apunta el nombre "google" y asi...
Con gethostbyname puedo resolver IP's dado el nombre en linux, en windows no he podido, siempre me devuelve un maldito :mad: '\n'.
Mira esto:
http://curl.haxx.se/mail/lib-2003-01/0241.html
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/gethostbyname_2.asp
Edición: dec :confused: te me adelantaste por cuestión de congestión aqí existente, chiezen!! bueno estos enlaces tratan de lo mismo, no pongo mi código en windows xq aún no me funciona ;)

seoane
05-07-2006, 15:50:34
Solo añadir que para que el codigo anterior funcione hay que inicar winsock primero. Quedaria algo asi:


function IPToHost(IP: string): string;
var
WSADATA: TWSADATA;
He: PHostEnt;
Addr: Integer;
begin
Result := IP;
if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
begin
Addr := inet_addr(PChar(IP));
He:= gethostbyaddr(@Addr, SizeOf(Addr), AF_INET);
if He <> nil then Result := He^.h_name;
WSACleanup();
end;
end;


Lo he probado y si le pongo la ip de mi maquina, por ejemplo, me devuelve el nombre del equipo pero si pongo la ip de google no me devuelve nada.

EDITO: Si pongo la ip 212.34.137.175 me devuelve "clubdelphi.net" asi que debe de funcionar

OSKR
05-07-2006, 15:54:39
En eso tienes razón, de lo contrario daría este error: WSANOTINITIALISED, pero aún no puedo resolver el IP dado el nombre, claro!! con el gethostbyname

Mick
05-07-2006, 17:25:18
Solo comentar que el que no funcione con google o con otros servidores no es un problema del codigo, simplemente esto significa que google en sus DNS no habra definido el registro en su zona inversa, de modo que no es posible saber el nombre a partir de la IP.

Otra cosa a tener en cuenta es que es posible que la funcion devuelva un nombre distinto al que esperariamos, eso es debido a que una misma IP puede tener muchos nombres distintos.

Saludos

OSKR
05-07-2006, 17:35:52
Mick:
eso es debido a que una misma IP puede tener muchos nombres distintos
:confused: ? Será un nombre...muchas IP's....no se como sería lo contrario

arima
05-07-2006, 18:20:52
les doy gracias por la ayuda que me prestan muchachos, probare todas sus sugerencias y les aviso si se pudo o no

gracias idolos :)

Mick
25-07-2006, 18:07:24
Mick:

:confused: ? Será un nombre...muchas IP's....no se como sería lo contrario


Si contratas espacio web en cualquier empresa de hosting virtual, veras que tu web se instalará en un ordenador que es compartido por muchas otras webs y clientes, de modo que en una misma IP, tendria muchos nombres distintos.
Por ejemplo, supongamos que clubdelphi estuviese en un host virtual, entonces;

www.clubdelphi.com
www.loquesea.com
www.pepito.es

Todos esas webs podrian estar alojadas en la misma IP.

Haces un ping a www.clubdelphi.com y ves que la IP es pongamos por ejemplo (no es cierto): 231.23.34.11

Pues luego podriamos pensar que si hacemos lo contrario, es decir pedir el nombre de 231.23.34.11, deberia salir:
www.clubdelphi.com,
Pues lo mas probable es que te saliese algo del estilo:
servidor1.empresadehostlaquesea.com
Que no tiene nada que ver con www.clubdelphi.com.

Y ni siquiera es necesario que la web este en un host virtual, es comun que quien tenga un servidor tenga en el mismo equipo distintos servicios, y haya dado de alta distintos nombres para la misma ip, por jemplo.

www.clubdelphi.com
mail.clubdelphi.com
ftp.clubdelphi.com

Todos podrian estar apuntando a la misma, ip, al mismo ordenador.


Saludos

EveElgrande
26-07-2006, 13:48:26
Amigos, yo no se mucho de esto...pero no se podría hacer que dada la dirección IP se obtenga todos los servicios de internet asociados al equipo con dicha IP...

EveElgrande
27-07-2006, 14:57:33
Amigos, yo no se mucho de esto...pero no se podría hacer que dada la dirección IP se obtenga todos los servicios de internet asociados al equipo con dicha IP...

¿Se podrá hacer esto...?

seoane
27-07-2006, 15:20:35
Amigos, yo no se mucho de esto...pero no se podría hacer que dada la dirección IP se obtenga todos los servicios de internet asociados al equipo con dicha IP...

Para eso se utiliza un escaner de puertos (http://en.wikipedia.org/wiki/Port_scanner), que básicamente busca puertos abiertos. Algunos van mas allá e intentan adivinar para que se utiliza ese puerto, para ello prueban con los protocolos mas habituales http, ftp, etc... y analizan la respuesta del servidor.

Si quieres hacer algo parecido desde delphi, la primera parte es sencilla. Utilizando TidTCPClient de Indy, TClientSocket o cualquier otro similar en un bucle puedes intentar establecer una conexión con cada uno de los puertos de una lista, averiguando así si están abiertos o no. Lo segundo, averiguar para que sirve cada puerto ya es algo mas difícil, podemos suponer que el 80 es para http pero puede que lo estén utilizando para cualquier otra cosa y que para http usen el 6000, por eso hay que hacer pruebas con varios protocolos.

EveElgrande
27-07-2006, 15:33:04
Bueno amigo, si que entendí tu explicación y pero a la hora de programar lo que me has dicho es donde me pierdo, acuérdate que soy nuevo, na pero poco a poco jejejeje...dame un norte....

EveElgrande
27-07-2006, 20:02:38
Hola Seoane hace falta, si tienes un ejemplo de esto a mano por favor tíralo para acá...

Mick
27-07-2006, 22:52:04
Solo comentar, que en algunos paises hacer un scaneo de puertos sobre una computadora ajena sin permiso es ilegal, asi que cuidadin.

Saludos

OSKR
16-08-2006, 17:34:52
No puedo creerlo!! ya pude responder a este tema q tanto problema me diò
Al grano..
Mick:

Cita:
Originalmente Escrito por OSKR
Mick:

:confused: ? Será un nombre...muchas IP's....no se como sería lo contrario



Si contratas espacio web en cualquier empresa de hosting virtual, veras que tu web se instalará en un ordenador que es compartido por muchas otras webs y clientes, de modo que en una misma IP, tendria muchos nombres distintos.
Por ejemplo, supongamos que clubdelphi estuviese en un host virtual, entonces;

www.clubdelphi.com (http://www.clubdelphi.com/)
www.loquesea.com (http://www.loquesea.com/)
www.pepito.es (http://www.pepito.es/)

Todos esas webs podrian estar alojadas en la misma IP.

Haces un ping a www.clubdelphi.com (http://www.clubdelphi.com/) y ves que la IP es pongamos por ejemplo (no es cierto): 231.23.34.11

Pues luego podriamos pensar que si hacemos lo contrario, es decir pedir el nombre de 231.23.34.11, deberia salir:
www.clubdelphi.com (http://www.clubdelphi.com/),
Pues lo mas probable es que te saliese algo del estilo:
servidor1.empresadehostlaquesea.com
Que no tiene nada que ver con www.clubdelphi.com (http://www.clubdelphi.com/).

Y ni siquiera es necesario que la web este en un host virtual, es comun que quien tenga un servidor tenga en el mismo equipo distintos servicios, y haya dado de alta distintos nombres para la misma ip, por jemplo.

www.clubdelphi.com (http://www.clubdelphi.com/)
mail.clubdelphi.com
ftp.clubdelphi.com

Todos podrian estar apuntando a la misma, ip, al mismo ordenador.


Insisto...el nombre es sigue siendo uno solo....un nombre...n IP's.
Otra cosa es un DNS redirija la peticiòn a un IP comùn a otros DNS por aqello de la resoluciòn de nombres de dominio, tener una URL apuntando a tu IP (por decirlo asi), q tu proxy responda al trafico web q correspondrìa a un servidor q esta detras del mismo reenviando dichas cabeceras, etc...pero el nombre es uno solo, las URL si pueden ser muchas.