2010-11-23 19 views
36

Estoy tratando de rastrear las direcciones IP de los visitantes. Cuando utilizo $_SERVER["REMOTE_ADDR"], obtengo la dirección IP del servidor en lugar de la del visitante. Intenté esto en varias máquinas en varias ubicaciones y todas dieron como resultado la misma IP. ¿Hay alguna configuración de PHP/servidor que podría estar afectando esto?

+2

¿Nos puede vincular con el sitio para confirmar? ¿También ha verificado los valores (SI ESTÁ PRESENTE) de '$ _SERVER ['HTTP_CLIENT_IP']' y '$ _SERVER ['HTTP_X_FORWARDED_FOR']'? – Dereleased

+0

Sí, lo intenté. Voy a seguir adelante y preguntar a los administradores de Unix cuál podría ser el problema. No es un problema en ninguno de nuestros otros servidores. – Lincecum

+2

Esto puede ser una configuración incorrecta del servidor web o algún tipo de proxy en el camino. El misterio podría resolverse si descubres quién es el IP :) – Vatev

Respuesta

37

REMOTE_ADDR no se puede confiar.

De todos modos, trate

$ipAddress = $_SERVER['REMOTE_ADDR']; 
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { 
    $ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])); 
}

Editar: Además, ¿enrutador de su servidor ha activado el reenvío de puertos? Es posible que esté jugando con los paquetes.

+2

Utilicé esta idea y encontré un error de "estándares estrictos" sobre pasar por referencia. La solución fue explotar primero en una variable.ex: '$ explotado = explotar (',' $ _SERVER ['HTTP_X_FORWARDED_FOR']); $ ipAddress = array_pop ($ explotado); ' – ndasusers

+7

Tenga en cuenta el hecho de que HTTP_X_FORWARDED_FOR se puede falsificar fácilmente – Tosh

+1

¿qué tal https? – siniradam

9

$_SERVER['REMOTE_ADDR'] indica la dirección IP desde la que se envió la solicitud al servidor web. Esta suele ser la dirección del visitante, pero en su caso, parece que hay algún tipo de proxy sentado justo antes del servidor web que intercepta las solicitudes, por lo tanto, al servidor web parece que las solicitudes proceden de allí.

+0

He desarrollado un LIKE SYSTEM donde obtengo IP real de los usuarios. Ahora, estoy enfrentando un problema. Estoy conectado a la conexión wi-fi a la casa. Cuando hago clic en el botón LIKE en la computadora portátil, funciona. Cuando reviso el mismo en otro navegador, funciona. Pero, cuando abro el sitio en mi móvil, entonces dos IP se registran en mi base de datos. Uno es el enrutador IP y el otro es la IP del móvil. Pero, la IP móvil cambia cada pocos segundos. Entonces, mi sistema piensa que es una persona diferente y cuenta el voto de la misma persona que otra persona. –

+0

Creo que generalmente se acepta que usar una dirección IP para cualquier tipo de identificación de usuarios es una muy mala idea, ya que hay muchas maneras en que la dirección IP será incorrecta, cambiada o duplicada. Encuentra otro mecanismo Gracias por su respuesta, @KalpeshSingh –

+0

. Encontraré una mejor solución pronto. –

15

Al usar $ _SERVER ["REMOTE_ADDR"], obtengo la dirección IP del servidor en lugar de la del visitante.

Entonces algo está mal, o es extraño, con su configuración.

  • ¿Está utilizando algún tipo de proxy inverso? En ese caso, la sugerencia de @simshaun puede funcionar.

  • ¿Tiene algo más fuera de lo común en la configuración de su servidor web?

  • ¿Puede mostrar el código PHP que está utilizando?

  • ¿Puede mostrar cómo se ve la dirección? ¿Es local, o una dirección de Internet?

4

No busque más direcciones IP no configuradas en el encabezado esperado. Eso sí, el siguiente para inspeccionar todo el variables de servidor y averiguar cuál es el adecuado para su caso:

print_r($_SERVER); 
+0

encontré lo que estaba buscando como estaba: HTTP_X_REAL_IP: json_encode ($ _ SERVER) <- si necesita iniciar sesión –

1

Sustitución:

$_SERVER["REMOTE_ADDR"]; 

Con:

$_SERVER["HTTP_X_REAL_IP"]; 

trabajado para mí.

Cuestiones relacionadas