PDA

Ver la Versión Completa : Conocer ip publica del router


Assolon
21-09-2006, 11:30:09
hola,

estoy aburrido de buscar información de como saber la ip publica de mi router desde delphi pero todo lo que consigo es en php, ¿alguien sabe o tiene la solución de esto?

Gracias.

cecam
21-09-2006, 12:03:59
function IP_Publica:string;
function IsNumeric( T:string ):boolean;
begin
Result:=false;
if (length(T)>0) then
case T[1] of
'0'..'9':Result:=true;
end;
end;
var
HTMLBody:string;
i:integer;
IdHTTP:TIdHTTP;
begin
Result:='';
if WinInet.InternetGetConnectedState(nil,0)
then begin
IdHTTP:=TIdHTTP.Create(Application);
try
HTMLBody:=IdHTTP.Get('http://checkip.dyndns.org/');
for i:=0 to Length(HTMLBody)-1 do begin
if IsNumeric(HTMLBody[i])
or (HTMLBody[i]='.')
then Result:=Result+HTMLBody[i];
end;
finally
IdHTTP.Free;
end;
end;
end;


Saludos!

Assolon
21-09-2006, 14:08:46
Muchas gracias, ahora mismo me vale para salir del paso. Lo que intento hacer es no depender de una web que me devuelva la ip, sino que yo pueda recuperar esa información del mismo router.

Casimiro Notevi
21-09-2006, 15:10:42
Muchas gracias, ahora mismo me vale para salir del paso. Lo que intento hacer es no depender de una web que me devuelva la ip, sino que yo pueda recuperar esa información del mismo router.

Creo que aunque consiguieras leer el dato del propio router, no te serviría para otros routers.

jachguate
21-09-2006, 17:51:30
Es probable que con snmp podás obtener el IP público del router, aunque desconozco como, te dejo la idea para que profundices en ella.

Hasta luego.

;)

roman
21-09-2006, 18:10:06
¿Qué es snmp?

// Saludos

jachguate
21-09-2006, 18:29:48
Bien... reconozco que debí explicarlo mejor:

SNMP = Simple Network Management Protocol

Muchos dispositivos de red, como routers, impresoras y otros, pueden administrarse con este protocolo. Indy, en la paleta Indy Clients hay un componente TidSNMP con el que pueden hacerse queries a un equipo remoto.

Es algo que yo no he tenido ocasión de programar, por eso simplemente lo lancé como una idea. De utilidad será el rfc1157: Simple Network Management Protocol (SNMP) (http://www.faqs.org/rfcs/rfc1157.html) y me parece que la cosa irá por el envío del query: public ip.ipAddrTable, según deduzco de lo dicho en esta página (http://www.wlug.org.nz/SNMP)

Hasta luego.

;)

seoane
21-09-2006, 18:50:01
La verdad es que después de la explicación de jachguate, hasta me da un poco de vergüenza sugerir esto, pero puedes utilizar el Telnet para comunicarte con el router. Lo malo que tiene este método es que, como bien dice Casimiro, tendrás adaptarlo a cada modelo de router.

En cuanto al snmp, había oído hablar de el, se que mi router lo tiene, :o pero he de reconocer que apenas se como funciona. La verdad es que me ha picado la curiosidad y lo voy a poner en mi lista de cosas para aprender ...

Aquí te dejo un ejemplo de como hacerlo por telnet para un router COMTREND de telefónica (el que yo tengo). Espero que te sirva, al menos mientras no encuentres como hacerlo con snmp.

Edito:

El programa adjunto tiene un fallo en la función Conectar si se le pasa un nombre en vez de la ip, la función corregida seria la siguiente:

function Conectar(Host: string; Puerto: Integer): TSocket;
var
Address: u_long;
HostEnt: phostent;
Addr: sockaddr_in;
begin
Result:= INVALID_SOCKET;
Address:= inet_addr(Pchar(Host));
if Address = INADDR_NONE then
begin
HostEnt:= gethostbyname(PChar(Host));
if HostEnt <> nil then
Address:= PInAddr(HostEnt.h_addr_list^)^.S_addr;
end;
if Address <> INADDR_NONE then
begin
Result:= socket(AF_INET, SOCK_STREAM, 0);
if Result <> INVALID_SOCKET then
begin
Addr.sin_family:= AF_INET;
Addr.sin_addr.S_addr:= Address;
Addr.sin_port:= htons(Puerto);
if connect(Result, Addr, Sizeof(Addr)) = SOCKET_ERROR then
begin
closesocket(Result);
Result:= INVALID_SOCKET;
end;
end;
end;
end;

roman
21-09-2006, 19:05:38
Gracias Juan Antonio, ya probaré en la tarde a ver si mi adsl maneja snmp.

// Saludos

seoane
25-09-2006, 23:31:23
Bueno, he estado "trasteando" un poco con el snmp. El protocolo, básicamente, permite leer o escribir variables en algunos aparatos. Cada una de estas variables se identifica por OID, una secuencia de números, por ejemplo la variable sysUptime tiene el siguiente OID "1.3.6.1.2.1.1.3.0". Hasta aquí todo correcto, he conseguido leer usando la api WinSmp algunas variables (SysUptime, SysName, interfaces, etc). Pero por mucho que busco no encuentro ninguna variable que devuelva la ip del router, es mas, programas como "Interface Traffic Indicator" (http://software.ccschmidt.de/) permiten monitorizar por snmp el trafico de red, incluso da detalles sobre cada uno de los interfaces del router, pero no la ip. Otro programa como MIB Browser (http://www.ks-soft.net/hostmon.eng/mibbrowser/index.htm) con un completo listado de OIDs tampoco tiene información sobre la ip publica del router.

Todo esto me lleva a la siguiente duda ¿Se puede averiguar la ip publica del router por snmp? Si alguien esta familiarizado con el protocolo snmp, o conoce algún programa que de esa información me gustaría que lo comentase para así saber que no estoy buscando algo que no existe. Y lo que ya seria fantástico es que conociera su OID

jachguate
26-09-2006, 01:02:43
En este sitio (http://www.bradfordnetworks.com/board/board.cgi?id=BSI_Tools&action=view&gul=13) encontré un snmpWalk para windows. En la oficina no tengo el equipo como para probarlo, así que esa tarea te la dejo a vos. Entiendo que el programilla recorre (con next, next) todos los valores de un dispositivo dado un prefijo, por lo que bien podríamos, por deducción, determinar el OID que nos interesa, o al menos aproximarnos a él.

Hasta luego.

;)

seoane
26-09-2006, 01:37:08
jachguate el programa funciona de maravilla, me da un listado completo de la variables del router, pero lamentablemente ninguna se corresponde con la ip publica. Me da las típicas sobre el sistema, todo tipo de estadísticas sobre el trafico, una lista de los interfaces y sus direcciones MAC, pero nada de ips :(

Estoy casi seguro de que no es una de la variables estándar, puede que sea particular de algún fabricante. Pero como no lo puedo asegurar sigo esperando que alguien me ponga sobre la pista de algún programa que consiga leer ese dato.

Casimiro Notevi
26-09-2006, 09:33:40
¿Ponemos premio al que lo consiga? :)

Caral
10-07-2007, 21:30:28
Hola
Aunque este hilo es viejito, parece que no hay una conclusion.
Aqui:
http://www.ajpdsoft.com/modules.php?name=Downloads&d_op=viewdownload&cid=1
Hay un programa con codigo en delphi que se llama Aviso cambio IP publica.
Este programa trabaja con o sin router, lo he probado con diferentes router y funciona, no se si lo conoceis, pero es interesante.
Saludos

seoane
10-07-2007, 21:40:45
Hola Caral, si no me equivoco, el programa usa el método de consultar una página web, y si es así, el código lo puedes ver en este mismo hilo.

O usando wininet aquí (http://www.clubdelphi.com/foros/showpost.php?p=133487&postcount=4)

Caral
10-07-2007, 21:49:58
Hola
Me parece que efectivamente llama a esta pagina http://www.ajpdsoft.com/ip.php
No estoy muy seguro.
El programa hace otras cosas interesantes, como enviarte un email si cambio la ip, entre otras.
Bueno, la idea es aportar algo mas.
Saludos

Caral
10-07-2007, 21:57:31
Hola
Por cierto, otro programa interesante:
http://www.lookatlan.com/
En Download, esta Look@Lan.
Este muestra los equipos en la red, se conecta a ellos, muestra los puestos abiertos en cada equipo, etc.
Esta interesante.
Saludos