Temas etiquetados como: ‘anónimo’

Obtener la IP del navegante con PHP

26 Abril, 2009

Las siguientes funciones pertenecen al plugin Check IP Behind Proxy de Ricardo Galli y como está en su Antiguo y abandonado blog de Ricardo Galli :-( , mejor lo guardamos para tenerlo mas a la mano.

La idea es obtener con php la "IP real" del usuario que visita tu página.

PHP:
  1. function isIPIn($ip,$net,$mask) {
  2.         $lnet=ip2long($net);
  3.         $lip=ip2long($ip);
  4.         $binnet=str_pad( decbin($lnet),32,"0","STR_PAD_LEFT" );
  5.         $firstpart=substr($binnet,0,$mask);
  6.         $binip=str_pad( decbin($lip),32,"0","STR_PAD_LEFT" );
  7.         $firstip=substr($binip,0,$mask);
  8.         return(strcmp($firstpart,$firstip)==0);
  9. }
  10.  
  11. function isPrivateIP($ip) {
  12.         $privates = array ("127.0.0.0/24", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16");
  13.         foreach ( $privates as $k ) {
  14.                 list($net,$mask)=split("/",$k);
  15.                 if (isIPIn($ip,$net,$mask)) {
  16.                         return true;
  17.                 }
  18.         }
  19.         return false;
  20. }
  21.  
  22. function check_ip_behind_proxy() {
  23.     $user_ip = $_SERVER["REMOTE_ADDR"];
  24.     if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
  25.         $user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  26.     } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
  27.         $user_ip = $_SERVER["HTTP_CLIENT_IP"];
  28.     } else {
  29.         return $user_ip;
  30.     }
  31.     $ips = preg_split('/[, ]/', $user_ip);
  32.     foreach ($ips as $ip) {
  33.         if (preg_match('/^(\d{1,3}\.){3}\d{1,3}$/s', $ip)
  34.             && !isPrivateIP($ip) ) {
  35.             $user_ip = $ip;
  36.         }
  37.     }
  38.     return $user_ip;
  39. }
  40.  
  41. echo check_ip_behind_proxy();

Como puedes ver hicimos un pequeñisimo cambio en check_ip_behind_proxy(): se descomenta y elimina la variable obligatoria $user_ip.

Clic aquí para bajar el plugin completo compactado ó en texto.
» Leer más: Obtener la IP del navegante con PHP