Foros del Web » Programando para Internet » PHP »

Obtener la IP real del visitante, esta es la mejor forma?

Estas en el tema de Obtener la IP real del visitante, esta es la mejor forma? en el foro de PHP en Foros del Web. Buenas, Me gustaría saber vuestros comentarios sobre esta función para conocer la IP real del visitante . @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php function ...
  #1 (permalink)  
Antiguo 03/10/2010, 08:12
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Obtener la IP real del visitante, esta es la mejor forma?

Buenas,

Me gustaría saber vuestros comentarios sobre esta función para conocer la IP real del visitante.

Código PHP:
Ver original
  1. <?php
  2. function getRealIP()
  3. {
  4.    
  5.    if( $_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
  6.    {
  7.       $client_ip =
  8.          ( !empty($_SERVER['REMOTE_ADDR']) ) ?
  9.             $_SERVER['REMOTE_ADDR']
  10.             :
  11.             ( ( !empty($_ENV['REMOTE_ADDR']) ) ?
  12.                $_ENV['REMOTE_ADDR']
  13.                :
  14.                "unknown" );
  15.    
  16.       // los proxys van añadiendo al final de esta cabecera
  17.       // las direcciones ip que van "ocultando". Para localizar la ip real
  18.       // del usuario se comienza a mirar por el principio hasta encontrar
  19.       // una dirección ip que no sea del rango privado. En caso de no
  20.       // encontrarse ninguna se toma como valor el REMOTE_ADDR
  21.    
  22.       $entries = split('[, ]', $_SERVER['HTTP_X_FORWARDED_FOR']);
  23.    
  24.       reset($entries);
  25.       while (list(, $entry) = each($entries))
  26.       {
  27.          $entry = trim($entry);
  28.          if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) )
  29.          {
  30.             // http://www.faqs.org/rfcs/rfc1918.html
  31.             $private_ip = array(
  32.                   '/^0\./',
  33.                   '/^127\.0\.0\.1/',
  34.                   '/^192\.168\..*/',
  35.                   '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/',
  36.                   '/^10\..*/');
  37.    
  38.             $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
  39.    
  40.             if ($client_ip != $found_ip)
  41.             {
  42.                $client_ip = $found_ip;
  43.                break;
  44.             }
  45.          }
  46.       }
  47.    }
  48.    else
  49.    {
  50.       $client_ip =
  51.          ( !empty($_SERVER['REMOTE_ADDR']) ) ?
  52.             $_SERVER['REMOTE_ADDR']
  53.             :
  54.             ( ( !empty($_ENV['REMOTE_ADDR']) ) ?
  55.                $_ENV['REMOTE_ADDR']
  56.                :
  57.                "unknown" );
  58.    }
  59.    
  60.    return $client_ip;
  61.    
  62. }
  63. ?>

¿Usáis otra función diferente, esta os parece bien? encontráis algún fallo?

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 03/10/2010, 08:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

En realidad, obtener la ip real del visitante, tiene sus fallos. Hay servidores que sirven como proxy y algunos de ellos reportan el IP que tenía anteriormente y otros no. Por lo que verificar el ip, solo es cuestión de usar algún código sencillo como por ejemplo
Código PHP:
Ver original
  1. <?php
  2.     function get_real_ip()
  3.     {
  4.  
  5.         if (isset($_SERVER["HTTP_CLIENT_IP"]))
  6.         {
  7.             return $_SERVER["HTTP_CLIENT_IP"];
  8.         }
  9.         elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
  10.         {
  11.             return $_SERVER["HTTP_X_FORWARDED_FOR"];
  12.         }
  13.         elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
  14.         {
  15.             return $_SERVER["HTTP_X_FORWARDED"];
  16.         }
  17.         elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
  18.         {
  19.             return $_SERVER["HTTP_FORWARDED_FOR"];
  20.         }
  21.         elseif (isset($_SERVER["HTTP_FORWARDED"]))
  22.         {
  23.             return $_SERVER["HTTP_FORWARDED"];
  24.         }
  25.         else
  26.         {
  27.             return $_SERVER["REMOTE_ADDR"];
  28.         }
  29.  
  30.     }
  31.     echo get_real_ip();
El código es tomado de http://www.vision.to/get-a-real-ip-vs-proxy.php
Si deseas usar el tuyo, también lo puedes hacer. Pero debes saber que no necesariamente vas a obtener la IP real del cliente, por lo que te indiqué. Y leyendo un tema por ahí, indican que no uses HTTP_X_FORWARDED_FOR porque una persona puede hacer un "spoofed", engañando al sistema y por lo tanto entrar como si fuera por ejemplo el servidor tuyo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 03/10/2010, 09:28
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

tal como te dice @abimaelrc, no hay un método 100% fiable debido a los proxy's, un proxy bien configurado puede estar preparado para ello y de ninguna forma obtendrías el ip real
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #4 (permalink)  
Antiguo 03/10/2010, 10:25
Avatar de Miguelithox  
Fecha de Ingreso: diciembre-2008
Ubicación: Viña del Mar
Mensajes: 287
Antigüedad: 15 años, 10 meses
Puntos: 7
De acuerdo Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

Cita:
Iniciado por abimaelrc Ver Mensaje
En realidad, obtener la ip real del visitante, tiene sus fallos. Hay servidores que sirven como proxy y algunos de ellos reportan el IP que tenía anteriormente y otros no. Por lo que verificar el ip, solo es cuestión de usar algún código sencillo como por ejemplo
Código PHP:
Ver original
  1. <?php
  2.     function get_real_ip()
  3.     {
  4.  
  5.         if (isset($_SERVER["HTTP_CLIENT_IP"]))
  6.         {
  7.             return $_SERVER["HTTP_CLIENT_IP"];
  8.         }
  9.         elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
  10.         {
  11.             return $_SERVER["HTTP_X_FORWARDED_FOR"];
  12.         }
  13.         elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
  14.         {
  15.             return $_SERVER["HTTP_X_FORWARDED"];
  16.         }
  17.         elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
  18.         {
  19.             return $_SERVER["HTTP_FORWARDED_FOR"];
  20.         }
  21.         elseif (isset($_SERVER["HTTP_FORWARDED"]))
  22.         {
  23.             return $_SERVER["HTTP_FORWARDED"];
  24.         }
  25.         else
  26.         {
  27.             return $_SERVER["REMOTE_ADDR"];
  28.         }
  29.  
  30.     }
  31.     echo get_real_ip();
El código es tomado de http://www.vision.to/get-a-real-ip-vs-proxy.php
Si deseas usar el tuyo, también lo puedes hacer. Pero debes saber que no necesariamente vas a obtener la IP real del cliente, por lo que te indiqué. Y leyendo un tema por ahí, indican que no uses HTTP_X_FORWARDED_FOR porque una persona puede hacer un "spoofed", engañando al sistema y por lo tanto entrar como si fuera por ejemplo el servidor tuyo.
Muchas gracias por colocar este código, me servirá mucho en mi pronta y futura web (:
  #5 (permalink)  
Antiguo 03/10/2010, 14:09
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

Cita:
Iniciado por abimaelrc Ver Mensaje
En realidad, obtener la ip real del visitante, tiene sus fallos. Hay servidores que sirven como proxy y algunos de ellos reportan el IP que tenía anteriormente y otros no. Por lo que verificar el ip, solo es cuestión de usar algún código sencillo como por ejemplo
Código PHP:
Ver original
  1. <?php
  2.     function get_real_ip()
  3.     {
  4.  
  5.         if (isset($_SERVER["HTTP_CLIENT_IP"]))
  6.         {
  7.             return $_SERVER["HTTP_CLIENT_IP"];
  8.         }
  9.         elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
  10.         {
  11.             return $_SERVER["HTTP_X_FORWARDED_FOR"];
  12.         }
  13.         elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
  14.         {
  15.             return $_SERVER["HTTP_X_FORWARDED"];
  16.         }
  17.         elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
  18.         {
  19.             return $_SERVER["HTTP_FORWARDED_FOR"];
  20.         }
  21.         elseif (isset($_SERVER["HTTP_FORWARDED"]))
  22.         {
  23.             return $_SERVER["HTTP_FORWARDED"];
  24.         }
  25.         else
  26.         {
  27.             return $_SERVER["REMOTE_ADDR"];
  28.         }
  29.  
  30.     }
  31.     echo get_real_ip();
El código es tomado de http://www.vision.to/get-a-real-ip-vs-proxy.php
Si deseas usar el tuyo, también lo puedes hacer. Pero debes saber que no necesariamente vas a obtener la IP real del cliente, por lo que te indiqué. Y leyendo un tema por ahí, indican que no uses HTTP_X_FORWARDED_FOR porque una persona puede hacer un "spoofed", engañando al sistema y por lo tanto entrar como si fuera por ejemplo el servidor tuyo.
Entonces si quisiera hacer por ejemplo que solo se ejecute un script si la llamada procede de una determinada página y tiene la IP del servidor (Ej. vía cron) debería fiarme solo de $_SERVER["REMOTE_ADDR"] ?

Muchas gracias de antemano!
  #6 (permalink)  
Antiguo 03/10/2010, 16:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

Entiendo que sí, ya que no vas a saber el 100% de las personas de donde procede realmente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 03/10/2010, 23:50
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

Cita:
Iniciado por abimaelrc Ver Mensaje
Entiendo que sí, ya que no vas a saber el 100% de las personas de donde procede realmente.
De acuerdo, muchas gracias :D
  #8 (permalink)  
Antiguo 04/10/2010, 09:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

Si ejecutas un script vía cron y usango el CLI no vas a tener disponible $_SERVER['REMOTE_ADDR'] ya que esa variable se la informa el WebServer a PHP y via CLI no hay un WebServer.

Saludos.
  #9 (permalink)  
Antiguo 04/10/2010, 11:33
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

Cita:
Iniciado por GatorV Ver Mensaje
Si ejecutas un script vía cron y usango el CLI no vas a tener disponible $_SERVER['REMOTE_ADDR'] ya que esa variable se la informa el WebServer a PHP y via CLI no hay un WebServer.

Saludos.
A qué te refieres usando CLI (cliente php)?

Vía curl tampoco hay $_SERVER['REMOTE_ADDR']?

30 4 * * * /usr/bin/curl -u username:password http://localhost/protegido/boletin.php

Gracias
  #10 (permalink)  
Antiguo 04/10/2010, 11:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

A lo que se refiere a usar el Command Line. Ya que el CLI se ejecuta aparte del servidor web y esa variable ($_SERVER) son dadas (o mejor dicho, el servidor web almacena la información en esa variable) por el servidor web, tal como Apache, IIS, etc.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 04/10/2010, 14:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Obtener la IP real del visitante, esta es la mejor forma?

Si lo haces por curl no hay problema ya que es un request desde el mismo server vía HTTP, pero de esa forma tu Cron es accesible via web, lo que puede ser un riesgo de seguridad, es por eso que esas tareas se piensen hacer vía CLI y fuera del Document Root.

Saludos.

Etiquetas: ip, real, visitante, mejoras, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:36.