Obtener Dirección IP con PHP

La dirección IP (IP Address) del cliente nos permite conocer exactamente de donde es el usuario. Es útil por ejemplo si deseamos segmentar la publicidad por país o también para prevenir el Spam pues hay direcciones IP conocidas desde donde se hace el envío del spam.

Forma tradicional del Obtener el IP
Para obtener el IP comúnmente se utiliza la variable global $_SERVER con la propiedad REMOTE_ADDR, entonces podríamos imprimir el IP de la siguiente forma:

  1. echo $_SERVER['REMOTE_ADDR']; // muestra: 200.49.6.149

Pero que pasa si el usuario esta accediendo desde un proxy o desde un IP compartido, entonces este valor del IP obtenido no será el correcto. Para resolver este dilema hay propiedades adicionales que podemos utilizar:

  1. // IP compartido
  2. echo "IP Share: " . $_SERVER['HTTP_CLIENT_IP'] . "<br />";
  3. // IP Proxy
  4. echo "IP Proxy: " . $_SERVER['HTTP_X_FORWARDED_FOR'] . "<br />";
  5. // IP Acceso
  6. echo "IP Access: " . $_SERVER['REMOTE_ADDR'] . "<br />";

Obtener el IP real del usuario
Entonces basado en estas tres formas de obtener el IP del cliente crearemos una función llamada getRealIP el cual devolverá el IP del cliente.

  1. function getRealIP() {
  2.     if (!empty($_SERVER['HTTP_CLIENT_IP']))
  3.         return $_SERVER['HTTP_CLIENT_IP'];
  4.        
  5.     if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
  6.         return $_SERVER['HTTP_X_FORWARDED_FOR'];
  7.    
  8.     return $_SERVER['REMOTE_ADDR'];
  9. }

La función verifica si existen las primeras variables del servidor y según el resultado nos devuelve el valor del IP. Una vez obtenida este IP lo podemos utilizar para verificarlo con Akismet para saber si es un IP desde donde se hace spam por ejemplo.

Mas información

Comentarios Total 8 comentarios


Neck
Publicado: 07/08/2009 4:14 pm

Excelente articulo… Gracias por la información, pero tengo una duda (trataré de ser lo más explicito posible):

Desde hace tiempo utilizo un código similar para obtener la IP, pero con una ligera alteración.

if($_SERVER['HTTP_CLIENT_IP'] && strcasecmp($_SERVER['HTTP_CLIENT_IP'],”unknown”))

Utiliza la función STRCASECMP (que sirve para comparar cadenas de forma binaria, insensible a mayúsculas o minúsculas), para comparar la IP con unknown, esto en caso que la variable global devuelva unknown.

Ahora mis preguntas son, ¿esta demás agregar esa función al if?, ¿es común que la variable global $_SERVER devuelva unknown?

Gracias!
Tengo bastante tiempo leyendo tu blog, lo recomiendo ampliamente.

André Karell
Publicado: 12/08/2009 12:47 am

Esto también sirve para protección de proxys, genial

Twisterizo
Publicado: 16/08/2009 9:52 pm

Querido Unijimpe:
la verdad es un excelente blog y todo pero….
No se que paso prefería mas el anterior estilo del blog….

elder
Publicado: 17/08/2009 3:20 pm

Querido Unijimpe:
tambien a mi me gustaba el estilo anterior del blog
porfavor cambialo ;)

Xavi
Publicado: 03/10/2009 12:02 pm

Muchas gracias por la función, me ha ido muy útil

Francisco
Publicado: 12/10/2009 11:45 am

Funciona muy bien. Gracias.

Protegon
Publicado: 07/11/2009 6:52 pm

Gracias, esto está excelente ^^

Get IP address with PHP | Present Computing
Publicado: 11/11/2009 4:21 pm

[...] | Unijipe Categories: Internet, Programming Tags: address, code, get, ip, php, source Comments (0) [...]

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)