miércoles, 4 de marzo de 2009

Php: Obtener ip real del ciente

A continuación cómo obtener la dirección IP real del cliente en Php. Explicación con más detalle de la función aquí
function getRealIP()
{
   if( $_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
   {
      $client_ip = (!empty($_SERVER['REMOTE_ADDR']))?
         $_SERVER['REMOTE_ADDR']:
         ((!empty($_ENV['REMOTE_ADDR']))?
         $_ENV['REMOTE_ADDR']:"unknown");
      // los proxys van añadiendo al final de esta 
      // cabecera las direcciones ip que van "ocultando". 
      // Para localizar la ip real del usuario se 
      // comienza  a mirar por el principio hasta 
      // encontrar una dirección ip que no sea del 
      // rango privado. En caso de no encontrarse 
      // ninguna se toma como valor el 
      // REMOTE_ADDR
      $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))
         {
            // http://www.faqs.org/rfcs/rfc1918.html
            $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, 
               $client_ip, $ip_list[1]);
            if ($client_ip != $found_ip)
            {
               $client_ip = $found_ip;
               break;
            }
         }
      }
   }
   else
   {
      $client_ip = (!empty($_SERVER['REMOTE_ADDR']))?
         $_SERVER['REMOTE_ADDR']:
         ((!empty($_ENV['REMOTE_ADDR']))?
         $_ENV['REMOTE_ADDR']:"unknown");
   }
   return $client_ip;
}
var_dump(getRealIP());
Obtenido de EsLoMas.com

No hay comentarios: