2011-03-18 41 views
7

¿Cómo podemos rastrear la dirección IP real detrás del proxy utilizando PHP? Quiero decir una implementación pura de PHP. Porque pueden apagar los js de sus navegadores. Cuando el JS es enciéndeme, puedo usar la geolocalización HTML 5, así que no necesito la dirección IP para localizar al usuario.Cómo rastrear la dirección IP real detrás del proxy

Respuesta

1

El usuario que está detrás de un proxy no tiene una dirección IP enrutable globalmente. Si desea mantener el estado de la sesión, es mejor tener una clave de sesión que genere y configurarla como una cookie, o mantenerla en la URL (existen ventajas y desventajas con ese enfoque).

Si realmente desea saber cuál es su dirección IP en su propia red, probablemente pueda usar javascript en la página para encontrarla y luego enviarla de vuelta a su servidor.

12

Puede ver el encabezado HTTP X-Forwarded-For si se envía uno, pero no hay forma garantizada de saberlo.

+5

Y para que quede absolutamente claro: ** Esta cabecera no se puede confiar ** ** menos que TODAS las solicitudes ** pasan por un proxy ** ** USTED control y no hay petición puede comunicarse con su servidor directamente sin que ninguno va a través del proxy o ese encabezado siendo eliminado de alguna manera. Hay tantas aplicaciones PHP que simplemente usan la dirección IP de ese encabezado incondicionalmente si está disponible ... – ThiefMaster

8

Este código PHP funcionará, y es útil para proxies directo e inverso. Para los proxies inversos, tenga en cuenta que la información del encabezado X_FORWARDED_FOR, si está disponible, se puede falsificar y no se debe confiar en absoluto.

if($_SERVER["HTTP_X_FORWARDED_FOR"] != ""){ 
    $IP = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
    $proxy = $_SERVER["REMOTE_ADDR"]; 
    $host = @gethostbyaddr($_SERVER["HTTP_X_FORWARDED_FOR"]); 
}else{ 
    $IP = $_SERVER["REMOTE_ADDR"]; 
    $proxy = "No proxy detected"; 
    $host = @gethostbyaddr($_SERVER["REMOTE_ADDR"]); 
} 
+0

Por favor, me gustaría saber por qué he votado negativamente. Gracias. – Cogicero

+2

es por el nombre de la variable. $ IP debería llamarse '$ an_HTTP_header_that_may_looks_like_an_IP_address_possibly_faked' –

+1

Lol eres gracioso, Coronel :) Ya expuse la advertencia en mi explicación. De cualquier manera, sigue siendo el IP recibido por cierto: forjado o no! Aunque me encanta tu sentido del humor. – Cogicero

Cuestiones relacionadas