2008-11-04 20 views
6

Estoy desarrollando una aplicación web con servlet java, espero obtener la información de usuario del IP llamando al request.getRemoteAddr() desde el interior processRequest(HttpServletRequest request,HttpServletResponse response).¿Por qué HttpServletRequest.getRemoteAddr() no funciona en el servlet de Java?

Pero devuelve una dirección IP incorrecta. Como no soy muy conocedores de la materia, no sé lo que está en pantalla, tal vez un proxy, Tengo este:

 
RemoteAddr : 127.0.0.1 
RemoteHost : 127.0.0.1 
x-forwarded-for : null 

127.0.0.1 no es mi IP.

Sin embargo cuando voy a: http://www.javascriptkit.com/script/script2/displayip.shtml se mostrará el correcto, ya que estoy usando servlet, no tengo el .shtml en mi página html generada dinámicamente, ¿qué puedo hacer? ¿Y por qué la secuencia de comandos en ese sitio puede mostrarlo correctamente, mientras que request.getRemoteAddr() no puede hacerlo?

Gracias por todas las respuestas, tengo una pista ahora, después de implementarlo en el servidor, funciona como se esperaba. Mostró la dirección correcta.

Pero incluso cuando lo desarrollo en mi máquina local, ¿cómo pedirle que muestre la IP absoluta como si se ejecutara en un servidor real? ¿O es factible?

+0

Cuando dice 'ip incorrecta ', ¿está la dirección dentro de su dominio? ¿Qué tan malo es? ¿Puede darnos más información sobre lo que devuelve la llamada _es_? –

Respuesta

19

¿Qué dirección IP está mostrando? Creo que hay algún proxy o algo que cambia las cosas. (Por ejemplo, esa página de script muestra la dirección IP de mi enrutador ADSL, no la de mi LAN, por razones obvias)

EDITAR: Ahora que ha demostrado que la dirección IP que está viendo es 127.0.0.1 la respuesta es bastante clara: está viendo su adaptador de bucle invertido (es decir, el acceso directo a la misma máquina), presumiblemente porque está probando en la misma máquina en la que está desarrollando. La respuesta es completamente correcta.

Pruébalo desde una máquina diferente y obtendrás una dirección IP más útil.

+0

Esa iba a ser mi pregunta también. Usted acaba de escribir más rápido. :) – Herms

4

Compruebe el encabezado X-Forwarded-For llamando a request.getHeader ("X-Forwarded-For") y vea qué IP devuelve.

+0

Usamos este encabezado y, si no está disponible, recurrimos a request.getRemoteAddr() – singhspk

3

La IP devuelta que está mostrando es la IP del host local. Esto plantea la pregunta: ¿dónde está probando y cómo está accediendo al servlet para probar?

Si está ejecutando el servlet en su máquina local (de desarrollo) y también lo está llamando desde un navegador en la misma máquina, entonces esta salida es absolutamente correcta.

Saludos,

-R

1

Usted está ejecutando el servidor de prueba en el equipo local y de conexión a ella en http://localhost/. Como se está conectando en la interfaz local, la fuente de la conexión también es localhost, también conocido como 127.0.0.1.

Cuestiones relacionadas