PDA

Ver la Versión Completa : Capturar la IP real del visitante



Guru
29/06/2006, 12:56
A veces por motivos de seguridad es necesario mostrarle al visitante que conocemos su IP de navegación, para ello es este pequeño código:


<? $realip = $_SERVER["REMOTE_ADDR"]; ?>


Pero este dato puede verse modificado por la utilización de proxys que enmascaran la verdadera ip del usuario, y se nos puede engañar. Para evitar esto, vamos a capturar la ip verdadera del usuario:


<?
if ($_SERVER) {
if ( $_SERVER[HTTP_X_FORWARDED_FOR] ) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif ( $_SERVER["HTTP_CLIENT_IP"] ) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if ( getenv( "HTTP_X_FORWARDED_FOR" ) ) {
$realip = getenv( "HTTP_X_FORWARDED_FOR" );
} elseif ( getenv( "HTTP_CLIENT_IP" ) ) {
$realip = getenv( "HTTP_CLIENT_IP" );
} else {
$realip = getenv( "REMOTE_ADDR" );
}
}
?>


La vamos a imprimir del siguiente modo:


<?
print $realip;
?>


Saludos

pepino
29/06/2006, 23:12
ala que buena cosa, buen codigo sirve bastante

Se le agradece ala


Saludos c.raz.y

Silent Ninja
09/10/2006, 12:00
Acá hay otro script para lo mismo que parece funciona mejor...


if ($_SERVER['HTTP_X_FORWARDED_FOR'] != '' ) {
$realip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : "Desconocido" );
$entries = split('[, ]', $_SERVER['HTTP_X_FORWARDED_FOR']);
reset($entries);
while (list(, $entry) = each($entries)) {
$entry = trim($entry);
if (preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list)) {
$private_ip = array('/^0\./', '/^127\.0\.0\.1/', '/^192\.168\..*/', '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/', '/^10\..*/');
$found_ip = preg_replace($private_ip, $realip, $ip_list[1]);
if ($realip != $found_ip) {
$realip = $found_ip; break;
}
}
}
} else {
$realip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR']) ) ? $_ENV['REMOTE_ADDR'] : "Desconocido");
}