Foros del Web » Programación para mayores de 30 ;) » Java »

Obtener la IP desde donde se carga mi applet

Estas en el tema de Obtener la IP desde donde se carga mi applet en el foro de Java en Foros del Web. Hola! Estoy desarrollando un programa de mensajería instantánea integrado en una página web mediante un applet. Uno de los parámetros necesarios es la IP desde ...
  #1 (permalink)  
Antiguo 22/11/2006, 04:45
 
Fecha de Ingreso: noviembre-2006
Mensajes: 35
Antigüedad: 17 años, 5 meses
Puntos: 0
Obtener la IP desde donde se carga mi applet

Hola!

Estoy desarrollando un programa de mensajería instantánea integrado en una página web mediante un applet. Uno de los parámetros necesarios es la IP desde donde se está ejecutando el applet cliente, para poder establecer una comunicación con el servidor. De momento para pruebas introduzco esta dirección directamente en el código, poniéndole la IP del PC desde donde hago las pruebas, pero como esto va a tener que funcionar desde cualquier ordenador, necesito que el applet detecte dinámicamente esta IP. ¿Exite alguna forma de hacerlo en el código html o en el código java del applet?

Muchas gracias!
  #2 (permalink)  
Antiguo 22/11/2006, 05:07
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Yo lo hacia as, a ver si te vale:

Código:
public String clientIP()
	{
		
	String s1 = "unknown";
        String s2 = getDocumentBase().getHost();
        int i = 80;
        if(getDocumentBase().getPort() != -1)
            i = getDocumentBase().getPort();
        try
        {
            String s = (new Socket(s2, i)).getLocalAddress().getHostAddress();
            if(!s.equals("255.255.255.255"))
                s1 = s;
        }
        catch(SecurityException _ex)
        {
            s1 = "ERROR";
        }
        catch(Exception _ex)
        {
            s1 = "ERROR";
        }
        
        return s1;
	}

Como ves no es tan trivial como pillar la IP a través del applet ya que está te devolverá normalmente Localhost. Por eso abro un socket.

Saludos
  #3 (permalink)  
Antiguo 22/11/2006, 06:13
 
Fecha de Ingreso: noviembre-2006
Mensajes: 35
Antigüedad: 17 años, 5 meses
Puntos: 0
Gracias pero no me funciona :(

Muchas gracias por tu ayuda, Valkam!He añadido tu código pero al cargar el applet me aparece la siguiente excepción en la consola de java:

java.lang.NullPointerException
at java.applet.Applet.getDocumentBase(Unknown Source)
at gov.nist.sip.instantmessaging.InstantMessagingGUI. <init>(InstantMessagingGUI.java:437)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Alguna idea de qué puede estar pasando?
  #4 (permalink)  
Antiguo 22/11/2006, 06:20
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
El metodo que he puesto debe estar dentro de la clase que sea el Applet. Prueba a ver si es eso, por que la linea que te esta dando el error es una llamada a un metodo de la clase Applet, no puede fallar en ese caso
  #5 (permalink)  
Antiguo 22/11/2006, 06:23
 
Fecha de Ingreso: noviembre-2006
Mensajes: 35
Antigüedad: 17 años, 5 meses
Puntos: 0
Sí que lo he puesto dentro de la clase que es un applet así que no puede ser por eso
  #6 (permalink)  
Antiguo 22/11/2006, 06:26
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Desde donde lo llamas??
  #7 (permalink)  
Antiguo 22/11/2006, 06:46
 
Fecha de Ingreso: noviembre-2006
Mensajes: 35
Antigüedad: 17 años, 5 meses
Puntos: 0
Le llamo desde el constructor de la clase
  #8 (permalink)  
Antiguo 22/11/2006, 06:49
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Mmmmm no se....por probar.....puedes llamarlo fuera del constructor?? En el init por ejemplo....no se una vez que haya terminado el constructor del applet
  #9 (permalink)  
Antiguo 22/11/2006, 12:07
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
getDocumentBase().getHost() no te devuelve la direccion del cliente que esta usando el applet, te da la direccion del servidor donde esta alojado el applet.

Para obtener la IP del cliente tendrías que usar:
Cita:
java.net.InetAddress.getLocalHost();
pero puede que para eso tengas que firmar el applet, aunque no estoy seguro.

S!
  #10 (permalink)  
Antiguo 22/11/2006, 12:12
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 3 meses
Puntos: 19
http://club.idecnet.com/~ccastano/femepa/091205.htm
Cita:
//Obtengamos nuestra IP local
/* Este método valdria para tener los 4 octetos
* InetAddress miIp=InetAddress.getLocalHost();
* Integer IP[]={0,0,0,0};
* byte direccionIp[]=miIp.getAddress();
* for (int i=0;i<4;i++) {
* IP[i]=(int)direccionIp[i];
* if (IP[i]<0) IP[i]=IP[i]+256;
* }//for
*/
//Pero para ir al grano es mejor este método
String IP=InetAddress.getLocalHost().getHostAddress();
  #11 (permalink)  
Antiguo 24/11/2006, 03:06
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Creo que lo que habeis puesto devolverá siempre localhost. Al menos a mi me devolvía eso.

Un Saludo
  #12 (permalink)  
Antiguo 24/11/2006, 03:24
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Efectivamente, a no ser que firmes el applet, por cuestiones de seguridad (lo acabo de leer en un foro de Sun) el applet te devolverá 127.0.0.1 si intentas conseguir la IP de esa manera.

Con el codigo que puse antes, lo que hago es abrir un socket con un puerto del servidor desde donde te has descargado el applet. Tu servidor es la unica maquina con la que el 'sandbox' de seguridad de un applet te permitira conectarte. Una vez tienes abierto el socket puedes tomar la direccion de ambos extremos facilmente.

Un Saludo
  #13 (permalink)  
Antiguo 24/11/2006, 03:47
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Ya veo, no me habia fijado en lo del socket. Gracias por la información, de esa forma te ahorras el firmar el applet. Pense que no haria falta pero si solo te devuelve localhost sin firmar... pues mejor así.

Curioso en este caso como es "relativamente fácil" saltarse el SandBox.

Otra alternativa podria ser escribir la IP en el servidor en el tag applet pasandoselo al applet como parametro, pero si usan un proxy no te serviría.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 19:32.