PDA

Ver la Versión Completa : saber el ip de internet


ebeltete
29-09-2003, 20:07:08
Hola amigos, partiendo del ejemplo de Delphi usando Tclientsockets, TNMMSGServ1 y TNMMsg1, estoy haciendo un programa para el envio de mensajes en una red, el tema es que en una red local no tengo problemas pues obtengo el ip o host de cada maquina con estos componentes, pero en el momento de querer usarlo en internet, no encuentro funcion o componente que me devuelva el IP de la conexion a Internet, tengo una máquina con un IP fijo que seria el "servidor" quisiera obtener el IP de los distintos clientes que se conecten al "servidor" via internet, uso Delphi 5, desde ya muchas gracias

guillotmarc
29-09-2003, 20:15:21
Hola.

A mi me gusta utilizar los servicios de paginas como http://checkip.dyndns.org/ (puedes encontrar otras).

Estas páginas devuelven la IP con la que estas conectado. Solo tienes que hacer que tu programa haga una solicitud HTTP a esta página, y buscar en el resultado, una cadena del tipo x.x.x.x que será la dirección IP.

NOTA : Como este servicio lo proporciona otra empresa, puede ser que deje de funcionar sin previo aviso. Por eso es mejor que la URL a utilizar sea configurable. Así si se da de baja esta página puedes pasar a utlizar otra como http://www.whatsmyipaddress.com

Saludos.

ebeltete
29-09-2003, 20:47:34
Bien, es una opcion válida, pero ya que tengo una IP fija en mi máquina, puedo enviar desde cualquier punto un mensaje a mi máquina, el tema es si con algun componente de la paleta fast net puedo obtener el IP de quien me envia un mensaje?

guillotmarc
29-09-2003, 20:58:25
Hola

No creo que ningún componente de las FastNet te dé esta información. Es complicado, aunque todos los paquetes IP llevan la información de la dirección IP que los ha enviado (mira la estructura de la cabecera de un paquete IP : http://www.freesoft.org/CIE/Course/Section3/7.htm). Te encontrarías problemas con los clientes que usen routers (muchos de los que tienen ADSL), puesto que lo que necesitas es la dirección IP del router y no el de la maquina.

Por eso prefiero que el cliente averigue su dirección IP externa mediante una página http, y cuando tengo la dirección se la envío al servidor que tiene IP fija.

Saludos.

marcoszorrilla
29-09-2003, 22:16:44
Mira a ver si con este ejemplo te puede servir:


uses Winsock;



function getIPs: TStrings;

type

TaPInAddr = Array[0..10] of PInAddr;

PaPInAddr = ^TaPInAddr;



var

phe: PHostEnt;

pptr: PaPInAddr;

Buffer: Array[0..63] of Char;

I: Integer; GInitData: TWSAData;



begin

WSAStartup($101, GInitData);

Result:=TStringList.Create;

Result.Clear;

GetHostName(Buffer, SizeOf(Buffer));

phe := GetHostByName(buffer);

if phe = nil then

begin

Exit;

end;

pPtr := PaPInAddr(phe^.h_addr_list);

I := 0;

while pPtr^[I] <> nil do

begin

Result.Add(inet_ntoa(pptr^[I]^));

Inc(I);

end;

WSACleanup;

end;



procedure TForm1.Button1Click(Sender: TObject);

begin
ShowWindow(Application.Handle, SW_HIDE);
memo1.Lines :=GetIps;

end;



Un Saludo.

kinobi
30-09-2003, 00:11:03
Hola,

Posteado originalmente por guillotmarc
Te encontrarías problemas con los clientes que usen routers (muchos de los que tienen ADSL), puesto que lo que necesitas es la dirección IP del router y no el de la maquina.

pero en ese caso llegarían al servidor con la dirección IP del router del cliente (la dirección externa/Internet del router, no la dirección IP del router dentro de la red local, ni la de la máquina que originó el paquete).

Saludos

guillotmarc
30-09-2003, 11:02:44
Hola

¿ Estas seguro ?. En el caso de que utilizes un Proxy, IP masquerading u otro sistema por el estilo, en el que delegas en otra maquina para que haga la conexión por ti y te devuelva el resultado, efectivamente el origen del paquete sería la dirección externa.

Pero simplemente con un router, el origen del paquete deberá mantenerse como la dirección IP de la LAN local. Puesto que ese router, al igual que el resto de routers por los que va a pasar el paquete, no modifica su contenido, simplemente lo dirije al segmento adecuado a los que está conectado el router.

Saludos.

kinobi
30-09-2003, 11:44:37
Hola,

Posteado originalmente por guillotmarc
¿ Estas seguro ?.

pues seguro, seguro, no lo estoy, pero en el caso que se estaba comentando (los modem/router ADSL) el router actúa como una pasarela (imagino que salvo los casos en que esté en modos monopuesto) entre la red local e Internet, donde no son enrutables las direcciones IP de la red local.

Saludos.