Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Conocer ip publica del router (https://www.clubdelphi.com/foros/showthread.php?t=35805)

Assolon 21-09-2006 11:30:09

Conocer ip publica del router
 
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

A ver si te sirve esto . . .
 
Código Delphi [-]
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

Conocer ip publica del router
 
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

Cita:

Empezado por Assolon
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) 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

Hasta luego.

;)

seoane 21-09-2006 18:50:01

1 Archivos Adjunto(s)
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:
Código Delphi [-]
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" 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 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 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?...download&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í

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


La franja horaria es GMT +2. Ahora son las 15:17:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi