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={FNAMEL}">ip2long($net);
  3.         $lip={FNAMEL}">ip2long($ip);
  4.         $binnet={FNAMEL}">str_pad( {FNAMEL}">decbin($lnet),32,"0","STR_PAD_LEFT" );
  5.         $firstpart={FNAMEL}">substr($binnet,0,$mask);
  6.         $binip={FNAMEL}">str_pad( {FNAMEL}">decbin($lip),32,"0","STR_PAD_LEFT" );
  7.         $firstip={FNAMEL}">substr($binip,0,$mask);
  8.         return({FNAMEL}">strcmp($firstpart,$firstip)==0);
  9. }
  10.  
  11. function isPrivateIP($ip) {
  12.         $privates = {FNAMEL}">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.                 {FNAMEL}">list($net,$mask)={FNAMEL}">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 ({FNAMEL}">isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
  25.         $user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  26.     } else if ({FNAMEL}">isset($_SERVER["HTTP_CLIENT_IP"])) {
  27.         $user_ip = $_SERVER["HTTP_CLIENT_IP"];
  28.     } else {
  29.         return $user_ip;
  30.     }
  31.     $ips = {FNAMEL}">preg_split('/[, ]/', $user_ip);
  32.     foreach ($ips as $ip) {
  33.         if ({FNAMEL}">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