Obtener la IP real de cliente en PHP – Evitar proxies.

Para conocer la IP real del cliente que nos visita nos puede bastar con el uso de la variable de servidor $_SERVER["HTTP_CLIENT_IP"] pero en otras ocasiones podemos encontrarnos con un cliente que nos visita a través de un proxie, en esos casos y para evitar falsas identificaciones podemos hacer crear una función que, recursivamente, busque el inicio de la conexión a través de estas mismas "variables de servidor"


Por poner un ejemplo y ver una situación real, en un proyecto con Arduino conectado a internet y abierto a la interactuación, independientemente de la ubicación, aparecerá un problema, y es que la IP variable que asignan los ISP´s (Proveedores de Servicios de Internet) es precisamente eso, variable. Si, es posible que haya pasado desapercibido al leerlo, pero lo más seguro es que ya lo hayas experimentado: cambia cada vez que se resetea el router o el ISP se le pone en la punta de... le da por ahí diremos.. En esos casos y mientras no dispongamos de un sistema DNS tipo DynDNS, No-IP, etc..., en el router, nos encontramos con que no podemos montar un script que nos permita contactar, estemos donde estemos, con nuestro Arduino ya que no se podría conocer si la IP mira a donde tiene que mirar.


Para solventar este problema en la primera versión de PecePececitos (el controlador de acuario basado en Arduino) se planteó un sistema que cada minuto, es decir, cada vez que Pecepececitos hacia un guardado de temperaturas o cambio de estado de los relés en la base de datos rescataba su IP y la guardaba en otra tabla de la base de datos. De este modo cada minuto tenia la IP de Pecepececitos actualizada en la BD para poder, tras la pertinente consulta, montar la url con la que comunicar con el controlador desde la web.


En mi enfermedad perpetua por indagar entre cacharros y código pensé "¿y si algún dia a estos de ******** igual que me suben la tarifa les da por meterme un proxie? - Me van a fastidiar todo el tinglado". Así que me puse a investigar y encontré algo navegando por StackOverflow.


Ejemplo de IP real cliente

<?

function ip_real() {
     
            if (isset($_SERVER["HTTP_CLIENT_IP"]))
            {
                return $_SERVER["HTTP_CLIENT_IP"];
            }
            elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
            {
                return $_SERVER["HTTP_X_FORWARDED_FOR"];
            }
            elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
            {
                return $_SERVER["HTTP_X_FORWARDED"];
            }
            elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
            {
                return $_SERVER["HTTP_FORWARDED_FOR"];
            }
            elseif (isset($_SERVER["HTTP_FORWARDED"]))
            {
                return $_SERVER["HTTP_FORWARDED"];
            }
            else
            {
                return $_SERVER["REMOTE_ADDR"];
            }
     
}
echo ip_real(); //Devuelve IP real de cliente

?>

Fuente: http://StackOverflow.com

Comentarios del artículo

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *