:::: MENU ::::

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:

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'] . "<br />";
// IP Proxy
echo "IP Proxy: " . $_SERVER['HTTP_X_FORWARDED_FOR'] . "<br />";
// IP Acceso
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.

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


22 Comentarios

  • Neck |

    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.

  • Twisterizo |

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

  • elder |

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

  • helper |

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

  • Kaien |

    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 ?

  • mauricio |

    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 |

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

  • jrondon |

    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 |

  • Harold |

    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 |

    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

Publica tu comentario

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;.