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

Obtener el dns con JSP

Estas en el tema de Obtener el dns con JSP en el foro de Java en Foros del Web. Hola a todos . Tengo una página jsp para obtener la ip y el dns o el nombre de host del que la visualize Código: ...
  #1 (permalink)  
Antiguo 13/01/2006, 14:31
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Pregunta Obtener el dns con JSP

Hola a todos . Tengo una página jsp para obtener la ip y el dns o el nombre de host del que la visualize
Código:
...
<body>

    Tus datos en la red:   
    Tu ip = <%=request.getRemoteAddr()%>,
    Tu Host =<%=request.getRemoteHost()%>
    
</body>
...
Pero me sale en tu Host la ip en lugar del nombre de host ¿?
Tus datos en la red: Tu ip = 80.59.69.239, tu Host =80.59.69.239
¿ Como obtengo el nombre de host ?
  #2 (permalink)  
Antiguo 13/01/2006, 14:55
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
http://java.sun.com/j2se/1.4.2/docs/...va.lang.String)
+
http://java.sun.com/j2se/1.4.2/docs/...l#getHostName()
  #3 (permalink)  
Antiguo 13/01/2006, 17:57
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Ya ... pero como se hace :
Lo intento con esto y nada de nada ...

Código:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="java.net.*"%>

<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
<body>
<% 
   java.net.InetAddress laip=null;
   String eldns = "", elhostname="";
   try{laip.getAllByName(request.getRemoteAddr());
   eldns = laip.getCanonicalHostName();
   elhostname = laip.getHostName();
   }
   catch(Exception e){}
   
   

%> 
<p style="margin-top: 0; margin-bottom: 0">--%><font color="#FFFFFF"><span style="background-color: #800080"><html><body bgcolor="#CCCCCC">   
    <b><%=request.getRemoteAddr()%></b><br><%=eldns%><br><%=elhostname%></span></font></p>
    
       
    </body>
</html>
  #4 (permalink)  
Antiguo 13/01/2006, 19:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
¿Que significa "nada de nada"? No es un termino técnico muy descriptivo para un error, que digamos. .

Así de buenas a primeras estás haciendo un "blind catch" (capturando Exception sin hacer "nada de nada") lo cual no es nada recomendable, si quieres saber los errores que te pueda dar. Si salta una excepcion en tu código, ni siquiera la veras.
  #5 (permalink)  
Antiguo 13/01/2006, 19:04
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Y ahora que lo miro bien, el error está muy claro. Y no lo ves precisamente por el "blind catch" .

Te daré una pista: NullPointerException.
  #6 (permalink)  
Antiguo 14/01/2006, 04:40
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Vale . Ahora he hecho lo siguiente :
Código:
<% 
   java.net.InetAddress laip=null;
   String eldns = "hay error", elhostname="hay error",error="hay error";
   try{
        laip.getByName(request.getRemoteAddr());
        eldns = laip.getCanonicalHostName();
        elhostname = laip.getHostName();
   }
   catch(Exception e){error="El error es:"+e.getMessage();}   
%> 

Tu ip=<%=request.getRemoteAddr()%><br>
tu dns=<%=eldns%><br>
tu hostname=<%=elhostname%><br>
error=<%=error%>
Y me sale : (http://myjavaserver.com/~javcasta/tuip.jsp)
tu ip=80.59.69.239
tudns=hay error
tu hostname=hay error
error=El error es:null

lo cual me indica que laip no toma ningún valor . Pero no sé como salir de la situación .
¿ No se supone que con esto laip.getByName(request.getRemoteAddr());
obtengo un objeto InetAddress . que es la ip del que está viendo la pagina?
  #7 (permalink)  
Antiguo 14/01/2006, 05:54
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
public static InetAddress getByName(String host).

Y lo que está ocurriendo es que te está saltando una NullPointerException. Lo cual suele ocurrir cuando llamas a un metodo de un objeto sin haberlo inicializado antes.
  #8 (permalink)  
Antiguo 14/01/2006, 06:43
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Desacuerdo

Ok. GreenEyed . Gracias por la explicación.
Ahora lo tengo así :
Código:
<% 
   InetAddress ip=null;
   String eldns = "hay error", elhostname="hay error",error="No hay error";
   try{
   InetAddress laip= ip.getByName(request.getRemoteAddr());
   eldns = laip.getCanonicalHostName();
   elhostname = laip.getHostName();
   }
   catch(Exception e){error=e.getMessage();}
   
   

%> 
<p style="margin-top: 0; margin-bottom: 0"><font color="#FFFFFF"><span style="background-color: #800080">   
    
<b><%=request.getRemoteAddr()%></b>
<br>tudns=<%=eldns%>
<br>tu hostname=<%=elhostname%>
<br>error=<%=error%>
</span></font></p>
Pero me no me resuelve el dns ni el hostname , me sigue dando la ip
Resultado : ( http://www.myjavaserver.com/~javcasta/tuip.jsp )
80.59.69.239
tudns=80.59.69.239
tu hostname=80.59.69.239
error=No hay error

  #9 (permalink)  
Antiguo 14/01/2006, 06:53
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
El error sigue siendo exactamente el mismo: estas usando una variable sin haberla inicializado (ip) y estas usando un metodo estático(getByName) a través de una variable en vez de accederlo de forma estática.
  #10 (permalink)  
Antiguo 14/01/2006, 07:20
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
¿ Podrias explicarte poniendo un ejemplo en código ?
Ya que ahora no hay error .
No termino de cazar lo que me dices ... es decir no sé implementar lo que me dices .
Ya que ip la inicializo a null ,pero la inicializo , y luego laip la creo con laip=ip.getByName(request.getRemoteAddr());
...
Gracias y un saludo.
  #11 (permalink)  
Antiguo 14/01/2006, 09:19
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
A ver. Si ip es null, porque la has inicializado a null (eso yo lo llamo sin inicializar) y luego llamas a un metodo de ip... ¿adivinas que podría pasar? . Y te repito que getByName es un metodo estático y que dichos métodos NO han de usarse como si fueran métodos de instancia.

Lo de que ahora no te de "no hay error" es por que estas usando un método estático sobre ip y no comprueba si la variable es null o ha sido correctamente inicializada, o sea que te libras por los pelos de una NPE

Y por ultimo, si el DNS donde esta configurado el programa no es capaz de resolver el nombre de la maquina, te devolverá la IP como nombre. Lo cual parece ser tu caso. Si yo accedo a la página desde mi ordenador, mi IP si la resuelve y me da un nombre.
Y la tuya yo desde mi ordenador tambien la puedo resolver, asi que puede ser un problema del DNS de myjavaserver.com.
  #12 (permalink)  
Antiguo 14/01/2006, 09:36
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Ok . Gracias . Puede que sea el DNS de myjavaserver.com ....
Pero , ya que lo mencionas . ¿ Como enfocarias de una manera "correcta" en java , lo que quiero hacer ? es decir usando correctamente los métodos estáticos .... El problema radica en que yo realmente no "pienso en java" ya que provengo de la antigua programación estructurada ( Pascal )... Y la verdad , la curva de aprendizaje de Java me dá escalofrios , es demasiado amplio java ... Pero hay que reconocer que es apasionante .

¿ Podrias poner en código un ejemplo sencillito de como se haria correctamente en java ? lo digo por eso de que más vale un ejemplo ...
Gracias por compartir.
  #13 (permalink)  
Antiguo 14/01/2006, 17:23
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
El codigo básico sería...
Código:
...
java.net.InetAddress laIA = InetAddress.getByName(request.getRemoteAddr());
String hostname = laIA.getHostName();
...
Y en el tratamiento de errores deberias capturar, en principio, únicamente UnknownHostException, que es la excepción normal del funcionamiento del programa. Si capturas Exception en global, se tragará tambien tus posibles errores de programacion y no sabrás que los tienes, como el caso del primer NullPointerException. Se puede hacer, pero entonces hay que hacer con la excepcion para que puedas saber que paso exactamente, como escribirlo en un fichero de log, etc.

Si es tu primera experiencia con Java, las JSP son una forma de empezar muy poco recomendable, ya que crea malos habitos y oculta cosas misteriosas. Te recomendaría por lo menos al mismo tiempo ir mirando un tutorial de introduccion a Java para ir aprendiendo las cosas básicas del lenguaje como las clases estáticas, tratamiento de excepciones, el classpath etc. Si no se te hará más duro.

El tutorial de Java de Sun, el libro gratuito "Thinking in Java" o sus traducciones, aunque mejor siempre las fuentes, te serviran para eso.

Suerte
  #14 (permalink)  
Antiguo 14/01/2006, 17:37
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Gracias .La verdad es que un JSP es bastante más amigable que un Servlet . Pero claro , todo depende de lo que uno quiera conseguir , que en mi caso no era más que obtener el DNS (comprobé por último que myjavaserver.com no resuelve el DNS , te devuelve la ip ¿Por que ? no lo sé , solo los Dioses y su admin sabrán...) . Supongo que cada cual profundiza según sus necesidades . Tomo nota de el Thinking in Java y de los tutoriales.
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




La zona horaria es GMT -6. Ahora son las 12:26.