Obtener Dirección IP con PHP

Este artículo ya se encuentra obsoleto.
Para una referencia actual leer: Cómo obtener la dirección IP de un Visitante en PHP o Node.js

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:

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:

// IP compartido
echo "IP Share: " . $_SERVER['HTTP_CLIENT_IP'] . "
"; // IP Proxy echo "IP Proxy: " . $_SERVER['HTTP_X_FORWARDED_FOR'] . "
"; // IP Acceso echo "IP Access: " . $_SERVER['REMOTE_ADDR'] . "
";

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.

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

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 22 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) […]

x-script
Publicado: 27/11/2010 11:21 am

como agrego o encuentro esa funcion que haces ? osea como lo llamo?

helper
Publicado: 27/12/2010 4:51 pm

puedes usar:
print "Te conectas desde: ".getRealIP();
o también:
$ipcliente=getRealIP();
echo "Te conectas desde: ".$ipcliente;

Iza
Publicado: 03/02/2011 8:15 pm

Excelente, felicidades!!! :)

Kaien
Publicado: 25/11/2011 11:24 am

Buenisimo este articulo… ahora me preguntaba lo siguiente : existe alguna forma en Javascript o en PHP de obtener la direccion fisica o MAC del computador ?

NOEL
Publicado: 27/11/2011 6:52 pm

Como hago para saber la direccion MAC de una computadora que este accediendo a una pagina web?

mauricio
Publicado: 30/01/2012 6:58 pm

como siempre en unijimpe los artículos BUENISIMOS, y este se pasa en bien explicado, pero lamentablemente debo reconocer que algunos tienen razon… PORFA VUELVAN AL DISEÑO ANTERIOR!!! ESTE SE VE EXTRAORDINARIAMENTE HORRENDO!!!!!!!!

disculpen la crueldad de mi comentario pero enserio que es FEO y con ganas de serlo!!

Dante
Publicado: 06/05/2012 12:11 am

Amigo Unijimpe:
Deberias de poner todo el codigo para descargar asi seria mas facil para TODOS.
Espero entiendas.
Saludos

Robert
Publicado: 05/06/2012 7:37 am

Muchas gracias pana

jrondon
Publicado: 30/07/2012 12:27 pm

Yo para saber la ip, forme una clase foote.inc, y el la pagina llamo con un include….

si no llegan me pide el codigo que con gusto se lo dare….

Copyright ©©

| Política de Privacidad |
Disenado por: JRondon |

mafuclero
Publicado: 12/09/2012 9:27 am

Hay una manera de obtener el ip sin que este valor cambie cada vez que se apage el router

Honorio Hernandez
Publicado: 11/01/2013 12:40 pm

Amigo como hago para saber la region, estado y pais con ese php?

Anonimo
Publicado: 06/02/2013 4:55 pm

Muchas gracias, está todo muy bien explicado y funciona a la perfección,

Un saludo!

Harold
Publicado: 29/04/2013 9:25 pm

La informacion esta buenisima, pero no soy desarrollador o ing, de sistemas, por lo que es para mi chino. Si me puede colaborar con instrucciones mas simples. Lo necesito para ubicar una ip de una persona que le esta haciendo ciberbulling a traves del blog que creo en una tarea del colegio, agradezco su colaboracion.

Richard
Publicado: 10/06/2014 3:06 pm

muy buen blog, pero amigo hay una manera que yo pueda vaciladar si esa ip es interna o externa x ejemplo si es ip interna que le mande a google caso contrario q me envie a msn

 

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>)