Encontrar la IP real de un visitante - Webeame Snippets


Añadir snippet

Encontrar la IP real de un visitante

Intenta conocer la IP real de un visitante aunque se encuentre tras un proxy
  1. /**
  2. * function ip (void)
  3. *
  4. * devuelve la IP de un usuario remoto
  5. *
  6. * return string
  7. */
  8. function ip () {
  9. $s_hxff = $_SERVER['HTTP_X_FORWARDED_FOR'];
  10. $s_ra = $_SERVER['REMOTE_ADDR'];
  11. $e_ra = $_ENV['REMOTE_ADDR'];
  12. $client_ip = empty($s_ra)?(empty($e_ra)?'unknown':$e_ra):$s_ra;
  13.  
  14. if ($s_hxff) {
  15. // los proxys van añadiendo al final de esta cabecera
  16. // las direcciones ip que van "ocultando". Para localizar la ip real
  17. // del usuario se comienza a mirar por el principio hasta encontrar
  18. // una dirección ip que no sea del rango privado. En caso de no
  19. // encontrarse ninguna se toma como valor el REMOTE_ADDR
  20.  
  21. $entries = split('[, ]', $s_hxff);
  22.  
  23. reset($entries);
  24.  
  25. while (list(, $entry) = each($entries)) {
  26. $entry = trim($entry);
  27.  
  28. if (preg_match('/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/', $entry, $client_ip)) {
  29. // http://www.faqs.org/rfcs/rfc1918.html
  30. $private_ip = array(
  31. '/^(00)?0\./',
  32. '/^127\.(00)?0\.(00)?0\.(00)?1/',
  33. '/^192\.168\..*/',
  34. '/^172\.0?((1[6-9])|(2[0-9])|(3[0-1]))\..*/',
  35. '/^0?10\..*/'
  36. );
  37.  
  38. $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
  39.  
  40. if ($client_ip != $found_ip) {
  41. $client_ip = $found_ip;
  42. break;
  43. }
  44. }
  45. }
  46. }
  47.  
  48. return addslashes($client_ip);
  49. }

En PHP ip real por Lito hace on 4/2/08 | Comentarios

Comentarios

Logeate para comentar