Ejemplo PHP: obtener la ip real de un visitante

logo de php

Ejemplo de código fuente en PHP de un método para obtener la ip real de un visitante a una determinada página, muy útil a veces para por ejemplo guardar esa ip de ese usuario en un campo de una base de datos.

 

 

Descripción del ejemplo

 

Mediante $_SERVER[‘HTTP_CLIENT_IP’] verificamos si la IP es una conexión compartida.

Mediante $_SERVER[‘HTTP_X_FORWARDED_FOR’] verificamos si la IP pasa por un proxy.

Mediante $_SERVER[‘REMOTE_ADDR’] obtenemos la dirección IP desde la cual está viendo la página actual el usuario.

 

De todas formas, la única información realmente fiable para conseguir la IP real, es la que nos da $_SERVER[‘REMOTE_ADDR’]. Conseguir la IP real de una IP que pasa por proxy o por conexiones compartidas, a veces es complicado si ese servidor proxy está muy bien configurado, o si alguien usa técnicas de Spoofing

 

Código

Método sencillo.

<?php


function getRealIP() {

        if (!empty($_SERVER['HTTP_CLIENT_IP']))
            return $_SERVER['HTTP_CLIENT_IP'];
           
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
       
        return $_SERVER['REMOTE_ADDR'];
}

?>

 

Método avanzado.

<?php

function getRealIP()
{

	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"];
	}

}

	
?>

 

Demo del ejemplo

La IP con la que estás visitando esta web es: 23.20.162.200

 

 

Valoración General

[Valoraciones:  9    Promedio:  3.8 de 5]
  • Alexis Moreno

    excelente!

  • Nilton Niler

    De antemano muchas gracias. Me podrías ayudar, decir el porqué sólo me sale 127.0.0.1; al hacer correr el código.

    • Javier Crego

      Es debido a que lo estás probando en local.

      Para que te funcione correctamente, deberás probar el código en un hosting externo php que tengas contratado, o si tienes un servidor (apache+php) propio, probar el código desde otra dirección ip distinta a la de dicho servidor.

      Saludos.

      • Leonidas131

        Es porque el sitio esta en tu servidor local (o sea en tu computadora) esa es la direccion ip de tu localhost

  • http://www.leymebamba.com Elí Davan Palma

    Hola,
    por que cuando corro el código me da como resultado 1

    Gracias.

    • Javier Crego

      Hola Elí.

      Eso es porque lo estás probando en localhost y la IP de localhost es 127.0.0.1
      Lo que pasa que para que te saliera la ip 127.0.0.1, tienes que configurar antes el servidor apache (en el archivo /etc/apache2/httpd.conf), y ponerle que escuche en:

      Listen 127.0.0.1:80

      De todas formas, si quieres probar realmente el ejemplo, deberás de poner el código mejor en cualquier web php alojada en un hosting de internet, en lugar de hacerlo en localhost.

      Saludos.

      • Nilton Niler

        Muchas gracias por el código y sobre todo la última, entonces si ya tengo ocupado el puerto 80; pongo el que está utilizando???—> osea así:
        Listen 127.0.0.1:80

      • Nilton Niler

        perdón, es:
        Listen 127.0.0.1:8080

  • http://babel.com.ve Manuel Joese Perez

    gracias por la informacion fue de mucha ayuda, saludos