Obtención de la IP real de una visita web en PHP
April 26th, 2005La forma más sencilla de obtener la dirección IP de un usuario en PHP es mediante la utilización de $_SERVER['REMOTE_ADDR'], sin embargo este valor no siempre es el que estamos buscando, hay veces en que las visitas llegan a nuestro web a través de proxys de que ocultan su dirección IP.
En la mayoría de los casos es aún posible obtener la dirección IP del usuario en estas situaciones, utilizando determinadas cabeceras. Pero antes conviene tener en cuenta las cabeceras que llegan al servidor web y los diferentes tipos de proxy que existen, para saber cómo funcionan y cómo obtener la dirección IP.
Cuando pedimos una página web el navegador se encarga de realizar la petición enviando una serie de cabeceras HTTP al servidor web. Estas cabeceras se hacen disponibles en el servidor web mediante variables de entorno que se añaden a las propias del servidor web, haciendo que tengamos disponibles variables como DOCUMENT_ROOT, HTTP_USER_AGENT, HTTP_ACCEPT_ENCODING, SERVER_ADDR, SERVER_PROTOCOL, HTTP_HOST… entre otras.
Aparte de estas variables de entorno provenientes tanto del cliente como del servidor, puede haber otras variables generadas a partir de cabeceras cuyo origen no es el cliente, si no algún sistema intermedio como proxys. En estos casos, cuando la petición web de un usuarios pasa a través de un proxy o anonimizador, estos pueden modificar las cabeceras del cliente o añadir nuevas, dependiendo del tipo de sistema que sea como veremos más adelante.
Para lo que nosotros necesitamos las siguientes son las variables de entorno más importantes:
- REMOTE_ADDR: dirección ip del cliente
- HTTP_X_FORWARDED_FOR: si no está vacío indica que se ha utilizado un proxy. Al pasar por el proxy lo que hace éste es poner su dirección IP como REMOTE_ADDR y añadir la que estaba como REMOTE_ADDR al final de esta cabecera. En el caso de que la petición pase por varios proxys cada uno repite la operación, por lo que tendremos una lista de direcciones IP que partiendo del REMOTE_ADDR original irá indicando los proxys por los que ha pasado.
Respecto al funcionamiento de los proxys y su interacción con la cabecera que genera la variable HTTP_X_FORWARDED_FOR, hay que tener en cuenta un par de cosas más. Por un lado la forma en la que los proxys concatenan la dirección del REMOTE_ADDR anterior al final de la cabecera no es siempre igual ya que en algunos casos se utiliza una coma y en otros un espacio. Por otro lado hay que tener en cuenta también que la primera dirección IP que viene en la variable HTTP_X_FORWARDED_FOR en algunas ocasiones es una dirección IP de las pertenecientes a los rangos de utilización privada. En estos casos partiendo de estas direcciones hay que continuar mirando el resto de direcciones disponibles hasta encontrar una del rango público.
Una vez vistas estas dos variables de entorno, conviene entender también, al menos de manera resumida, los diferentes tipos de proxy que existen.
Proxies transparentes
No ocultan la información IP de los clientes, únicamente la añaden a HTTP_X_FORWARDED_FOR dejando la suya en REMOTE_ADDR. El objetivo de estos proxys no es el de proporcionar anonimicidad en la red, sino la de cachear información o servir de punto de acceso común a Internet para varios equipos.
REMOTE_ADDR = IP-proxy HTTP_X_FORWARDED_FOR = IP-cliente
Proxies anónimos
Estos proxies ocultan la dirección ip del cliente proporcionando una forma de navegar anónima. La forma en que ocultan la dirección ip del cliente hace que un proxy se clasifique en una de las siguientes categorías:
Simples
No se oculta el hecho de que se está utilizando un proxy, únicamente se guarda la dirección ip del proxy en ambos cabeceras, sin que aparezca por ningún sitio la del cliente.
REMOTE_ADDR = IP-proxy HTTP_X_FORWARDED_FOR = IP-proxy
Proxys ruidosos
Son similares al anterior caso con la salvedad de que en vez de guardar su dirección ip HTTP_X_FORWARDED_FOR, guardan una generada aleatoriamente.
REMOTE_ADDR = IP-proxy HTTP_X_FORWARDED_FOR = IP-aleatoria
Proxys de alta anonimicidad
Este tipo de proxys oculta el hecho de que se esté utilizando un proxy para realizar la petición. Para ello sustituyen la dirección IP existente en REMOTE_ADDR por la suya y no lo indican mediante ninguna otra cabecera, por lo que no es posible saber que se está utilizando un proxy.
REMOTE_ADDR = IP-proxy HTTP_X_FORWARDED_FOR = sin-determinar
Código PHP
Una vez explicados esta serie de conceptos ya estamos en disposición de poder entender el siguiente código, cuyo objetivo es el de obtener la dirección IP real del usuario.
function getRealIP()
{
if( $_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
{
$client_ip =
( !empty($_SERVER['REMOTE_ADDR']) ) ?
$_SERVER['REMOTE_ADDR']
:
( ( !empty($_ENV['REMOTE_ADDR']) ) ?
$_ENV['REMOTE_ADDR']
:
"unknown" );
// los proxys van añadiendo al final de esta cabecera
// las direcciones ip que van "ocultando". Para localizar la ip real
// del usuario se comienza a mirar por el principio hasta encontrar
// una dirección ip que no sea del rango privado. En caso de no
// encontrarse ninguna se toma como valor el REMOTE_ADDR
$entries = split('[, ]', $_SERVER['HTTP_X_FORWARDED_FOR']);
reset($entries);
while (list(, $entry) = each($entries))
{
$entry = trim($entry);
if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) )
{
// http://www.faqs.org/rfcs/rfc1918.html
$private_ip = array(
'/^0\./',
'/^127\.0\.0\.1/',
'/^192\.168\..*/',
'/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/',
'/^10\..*/');
$found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
if ($client_ip != $found_ip)
{
$client_ip = $found_ip;
break;
}
}
}
}
else
{
$client_ip =
( !empty($_SERVER['REMOTE_ADDR']) ) ?
$_SERVER['REMOTE_ADDR']
:
( ( !empty($_ENV['REMOTE_ADDR']) ) ?
$_ENV['REMOTE_ADDR']
:
"unknown" );
}
return $client_ip;
}
Básicamente lo que hace la función es partiendo de la dirección indicada en REMOTE_ADDR obtener la dirección IP real. Si HTTP_X_FORWARDED_FOR es vacío la dirección que hemos obtenido previamente es la real (a no ser que se esté utilizando un proxy de alta anonimicidad). En caso contrario lo que se hace es obtener la lista de direcciones IP almacenada en HTTP_X_FORWARDED_FOR y buscar la primera que sea del rango público.
Más información
delicious
menéame
fresqui

June 28th, 2005 a las 7:26 pm
[…] a través de algún proxye. La función que se utiliza para ello es la comentada en el post obtención de la ip real de una visita web. Información GET, POST y […]
July 14th, 2005 a las 5:51 am
hmmm nose por uqe no corre ese codigo en mi pagina, estare haciend algo mal? lo puse en php pero nada no pas anad asolo me sale
Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in E:\Server\index.php on line 14
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in E:\Server\index.php on line 22
July 17th, 2005 a las 11:32 pm
Si puedes prueba de nuevo a copiar el código, el problema se debía a una molesta característica de wordpress que hace que se escapen las comillas dentro de los campos pre.
Lo he modificado, por lo que el código ya debería aparecer en la página tal como está escrito en realidad y 100% funcional
July 25th, 2005 a las 2:21 pm
Muy Bueno, me funciona bien.
Gracias.
August 2nd, 2005 a las 8:49 pm
Que podría hacer para obtener la IP del cliente en un proxy de alta anonimicidad ?
August 3rd, 2005 a las 11:32 am
Los proxys de alta anonimicidad no envían información en la cabecera HTTP_X_FORWARDED_FOR, por lo que en este caso no podríamos saber que está siendo utilizado, al menos no basándonos únicamente en las cabeceras HTTP.
Quizás se podría hacer algo utilizando JavaScript, pero realizando una pequeña busqueda en Google no he encontrado ningún mecanismo que funcione con carácter general.
August 22nd, 2005 a las 9:42 pm
Tengo instalado Apache2 + php5. Me dá el sigueinte error:
Parse error: syntax error, unexpected T_IF, expecting … line 3
Agradecería que me ayudarán a encontrar el problema.
October 9th, 2005 a las 9:10 pm
…hay maneras que aunque utilices javascript , java , activeX etc es imposible descubrir la IP real sino te saltaría la ip local.
Ademas seria una gilipollez descubrir la ip real , entonces para que coño servirian los proxies?
ademas tambien puedes juankear algun escritorio remoto y desde allí hacerlo todo , no hace falta ser hacker , juaker o juanker
October 10th, 2005 a las 9:19 am
me da la impresión de que no has leido en absoluto el artículo… en él se dice que hay situaciones en las que no es posible obtener la dirección ip de la visita, pero hay situaciones en las que sí, según el tipo de proxy que se utilice, porque como estoy seguro que sabrás, hay varios tipos de proxy
November 8th, 2005 a las 11:07 pm
La verdad no entendi nada
digan de una manera clara como obtengo un ip real de una computadora
paso a paso
November 9th, 2005 a las 8:11 pm
A ver Israel, la función de PHP getRealIP te permite obtener a partir de las cabeceras enviadas por el navegador del usuario la dirección “ip pública” del equipo de cliente.
La primera parte del artículo viene a explicar el mecanismo en el que se basa el código PHP para obtener la IP, y explica los posibles problemas qué puede haber, como situaciones en las que no sea posible obtener la IP.
Por supuesto, todo esto teniendo en cuenta que lo que quieras es obtener la ip de un usuario que acceda a una web, si lo que quieres es obtener la ip de un ordenador desde el mismo equipo u otras cosas por el estilo, eso no tiene nada que ver con esto
November 22nd, 2005 a las 10:30 pm
Pero, pero, pero…
Yo necesito saber la IP de equipos que están detrás de un proxy de alta anonimicidad (vaya palabra!), lo he intentado buscar en javascript y no encuentro na’a, sería posbile (y perdón por la pregunta) bajar ese nivel de anonimicidad (de nuevo esa palabra!)????
El proxy es una web Marshal
November 23rd, 2005 a las 1:31 pm
NO es posible obtener la dirección IP de un equipo que está tras un proxy de alta anonimicidad. Si tienes acceso al proxy podrías configurarlo como proxy transparente, que es la única forma en la que te llegará información sobre la IP real.
November 24th, 2005 a las 2:26 am
como puedo hacer para ver mi ip y esconderlo?de todos.
November 24th, 2005 a las 5:50 pm
Hola, he copiado la funcion y no me ha detectado la ipreal de las estaciones clientes. Tengo apache2 + php5 + mysql en el servidor web.
Este esta montado a su vez en un proxy Ipcop.
Queria saber porque me detecta las ip siempre con la ip del proxy (192.168.1.10).
Gracias. Un abrazo.
November 25th, 2005 a las 11:13 am
Prueba a crear una página que únicamente haga un phpinfo() y luego accede a ella. Para que esta función funcione en algún lugar debería aparecer tu IP, seguramente como parte de HTTP_X_FORWARDED_FOR, si no es así, se deberá seguramente a que el proxy no está pasando la ip del usuario al servidor.
Otra posibilidad puede ser que sí que le llegue la dirección pero estés probando todo en una red privada. La función esta pensada para obtener la dirección IP pública de un usuario, por lo que si la utilizas en una red interna con direcciones IP de los rangos privados puede que tengas que retocarla.
November 25th, 2005 a las 2:56 pm
Si tenes razón, mis pruebas son todas en una Red Privada. (en una intranet en una oficina publica).
1) Te pregunto, como tendria que tocar la funcion para que me de las verdaderas ip de las estaciones clientes.
2) Que tendría que tocar en el proxy o en el Servidor Web (Intranet) para evitar esto.
Muchas gracias por tu respuestas.
un abrazo, marcelo.
November 26th, 2005 a las 8:11 pm
Lo mejor es que mires el contenido exacto de HTTP_X_FORWARDED_FOR cuando una petición llega al servidor pasando por el proxy (usa phpinfo). Cuando la veas, seguramente contendrá la dirección IP original del cliente, modifica o crea una función específica para tratar tu caso, quizás te valga con un simple split o incluso con coger directamente el valor de la variable. La función publicada es para casos de redes públicas que por su naturaleza ha de ser bastante mas flexible.
Respecto a la segunda pregunta no puedo ayudarte, tendrás que mirar la documentación del proxy en cuestión
un saludo
December 10th, 2005 a las 3:02 am
No solo que el codigo funciona al 100%, sino que la explicacion previa es brillantemente simple. Desde aqui te agradezco la informacion expuesta.
January 6th, 2006 a las 8:55 pm
como hago funcionar este scrip en un servidor windows con IIS y php 5 y mysql 5
January 12th, 2006 a las 3:25 am
El código está genial, precisamente buscaba algo que ampliara una de las rutinas del programa (PHP) Teardropscounter, un buen código para detectar si una web tiene visitas “frikis” (FBI, CIA, SGAE, etc).
February 7th, 2006 a las 7:19 pm
¡Exelente!
Yo mismo lo subí a mi web y lo prové con mi proxy, y es realmente asombroso.
Muy bien. felicitaciones.
February 10th, 2006 a las 6:18 pm
me gustaria saber si podeis encontrar la ip de mi Website y si encontrais algunas fallas en mi sistema de seguridad, podeis hacermelas llegar al correo del site o al que les he dejao aki. angel_villasmil@cantv.net
February 19th, 2006 a las 11:58 pm
Disculpa la ignorancia, pero como llamo a la funcion para ver el ip ??
February 21st, 2006 a las 4:37 am
hola que tal este espacio esta muy bueno pero no soy tan bueno el la computadora y no me quedo muy claro les cuento quiero obtener la IP de una pagina web tengo que tener algun programa y introducir en el lo que dice aqui o lo hago por medio de D.O.S. Alquien que me pueda orientar porfavor no se como hacerle y si nesesito la IP mkb740@hotmail.com
March 26th, 2006 a las 10:44 pm
quisiera saber la direccion ip de la pagina de hotmail, es para una tarea y de verdad la necesito esperando y me contesten gracias…
March 31st, 2006 a las 9:12 am
Hotmail: IP: 208.172.13.254
Check Utility IP:
http://www.geobytes.com/IpLocator.htm?GetLocation
salu2
March 31st, 2006 a las 12:32 pm
buenas, encuentro muy interesante lo comentado aqui, y entiendo el significado del proxy de alta anomicidad, encuentro claro tb que no se podriamos conocer la ip real, y por mi parte en un sitio web me conformaria con saber que viene de un proxy y echarlo a la mierda, si no quiere que yo sepa su ip NO QUIERO QUE ENTRE EN MI WEB, es logico no?????????? como sabria yo que procede entonces de un proxy, siendo el proxy de alta anomicidad el ultimo y sabiendo que no me dara el HTTP_X_FORWARDED_FOR correcto para detectar si es o no un proxy??????????????????
March 31st, 2006 a las 9:50 pm
pues la respuesta es sencilla y corta, sencillamente no puedes
April 5th, 2006 a las 8:26 pm
pregunto lo mismo q Christian
soy nueva usan el php , si yo tengo una web y quiero saber la ip de los usuarios q entran a mi web, con esta funcion
como le hago ??? pego el codigo en una pagina nueva o en el index, y despues donde veo las ips?
disculpen la ignorancia pero necesito su ayuda gracias
April 6th, 2006 a las 11:43 am
Tienes que utilizar esta función como utilizarías cualquier otra desarrollada por ti. Si solo te hace falta en una página podrías pegarla dentro de ella, pero lo más recomendable es que la pongas en un archivo separado y lo incluyas con “include”. Para obtener la ip del usuario podrías simplemente hacer $ip = getRealIp(), y una vez hecho eso, pues depende de lo que quieras. Si quieres enseñársela al usuario puedes hacer “echo $ip”, o puedes guardarla en bbdd, o en un log,… eso ya depende de tus necesidades concretas.
April 25th, 2006 a las 10:35 pm
hola porfavor quiero y necesito la ip REAL de lp agina www.meebo.com porfavor!!!!
si me la pudiesen dar muchas gracias… la pagina le pongo un 10!!!!
saludos
April 26th, 2006 a las 8:38 am
Interesante articulo, tambien hay que aclarar que si el cliente tiene una aplicacion escrita en vb o algo que pueda manejar las cabeceras se hace dificl obtener la ip real.
Saludos
April 26th, 2006 a las 9:10 am
dieguito, este artículo tiene bastante poco que ver con lo que preguntas, de hecho es todo lo contrario. Para lo que quieres te sería suficiente con hacer un ping al nombre del dominio, o utilizar un comando como nslookup, encontrarás abundante información sobre ellos en google.
April 26th, 2006 a las 8:54 pm
Hasta cierto punto fabian, ten en cuenta que hay información que no va en cabeceras generadas en el cliente. Por ejemplo el REMOTE_ADDR lo obtiene el servidor web a partir de la dirección ip solicitante, y la cabecera HTTP_X_FORWARDED_FOR la incluyen los proxys al pasar por ellos.
May 10th, 2006 a las 10:10 am
Muy muy buena función aunque te recomiendo que utilices los puntos escapados en las expresiones regulares compatibles con perl.
Algun proxy puede darte la ip del usuario rellena de 0’s (por ejemplo: 088.003.213.025) y la función falla porque la primera expresion de $private_ip se cumple.
En resumen:
if ( preg_match(”/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/”, $entry, $ip_list) )
{
$private_ip = array(
‘/^0\./’,
‘/^127\.0\.0\.1/’,
‘/^192\.168\..*/’,
‘/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/’,
‘/^10\..*/’);
o incluso (aunque parezca muy raro):
$private_ip = array(
‘/^(00)?0\./’,
‘/^127\.(00)?0\.(00)?0\.(00)?1/’,
‘/^192\.168\..*/’,
‘/^172\.0?((1[6-9])|(2[0-9])|(3[0-1]))\..*/’,
‘/^0?10\..*/’);
Un saludo y gracias por compartir la función.
May 10th, 2006 a las 3:53 pm
Hola Jose, muy buena apreciación. En efecto es conveniente SIEMPRE escapar los puntos en las expresiones regulares para distinguirlos del caracter especial, de hecho suele ser algo que no se hace en muchas ocasiones y que puede provocar no solo fallos, sino también agujeros de seguridad.
De todas formas tengo que decir que los puntos sí que estaban escapados en el código original, sin embargo Wordpress al mostrar el código los ha eliminado, con lo que he tenido que escaparlos dos veces para que se mostrasen.
June 1st, 2006 a las 10:50 pm
Alguien podria decirme como queda la pagina final php para poder ver si me corre. Perdonen es que estoy unpoco frito en estas cosas y deseo crear una pagina que redireccione el cliente en dependencia de su ip.
Les agradesco de ante.
June 2nd, 2006 a las 1:49 am
Desearia que me indiquen como hago correr la aplicacion en la que me dan el codigo como la guardo no conopzco mucho php que extension de archivo etc gracias
June 2nd, 2006 a las 9:09 am
bueno, sin que sirva de precedente, voy a explicar algo que no está relacionado con el artículo sino con PHP básico. La forma más sencilla de utilizar el código de esta función sería por ejemplo guardar lo siguiente como un archivo ip.php:
<?php
function getRealIP(){
………código completo de la función…….
}
// llamamos a la función para obtener la ip del usuarios
$ip = getRealIP();
// ahora ya podemos trabajar con la variable $ip
// que contendría la ip del usuario
// Según lo que pretendamos hacer podríamos llamar directamente a este archivo
// con el navegador, o hacer un include de él desde otro programa…
?>
June 5th, 2006 a las 4:20 pm
Gracias Patxi ya logre correr la pagina. Pero ahora tengo un problema.
Yo quiereo que dada la ip que me detecta este script redireccionar al cliente a una pagina o sitio web distinto pero no lo logro.
Ya trate con header ( location: …. y nada. Es que tengo que poner este codogo en la cabecera o que.
Inserte luego de este script un if ($ip == 127.0.0.1) { header( “location: http://www.yahoo.com” ) } a modo de prueba y me detecta la ip pasa por el if pero no me redirecciona. Que puedo Hacer ?/???????
Ayudenme es que quiero direccionar a las ip a sus respectivos servidores de correo WEB.
June 5th, 2006 a las 7:15 pm
lo primero comprueba que efectivamente entre en el if, no sé si se te han olvidado las comillas o ha sido el editor al guardar tu comentario, pero mete la dirección ip de la comparación entre comillas. Para comprobar si entra en el if prueba a poner dentro un echo(”ha entrado en el if”);, a ver si te sale el mensaje en el navegador. Si te sale, debería rederigirte. Lo único que tienes que tener en cuenta es que antes del header no deberías haber enviado ningún carácter de vuelta hacia el navegador, ni con echo ni html fuera de etiquetas de php. Como último recurso te quedaría utilizar JavaScript haciendo un echo de un <script> que contuviera la redirección con location.href.
June 5th, 2006 a las 8:35 pm
Ok no las comillas la tenia puesta. Gracias ya lo resolvi. Simple puse el codigo en la pagina antes de declarar los tags html y los meta y head y todo. Osea puese una pagina que solo tiene el cogido php y con esto y un switch logre mandar a cada cual para su servidor de correo.
June 13th, 2006 a las 6:55 pm
Hola … implemente la funcion getIpReal()… pero me aparece el siguiente error:
Notice: Undefined index: HTTP_X_FORWARDED_FOR in D:\www\smc\Php\getIpReal.php on line 5
Recien me estoy iniciando en el mundo PHP… se que me falta inicializar esta variable…
Agradezco de antemano tu ayuda….
Saludos,,,,
June 14th, 2006 a las 11:11 am
Rodnie, en realidad lo que te da no es un error sino un “notice” debido a que se está accediendo a una posición de matriz que no existe. Para evitar que te salgan los notice puedes usar la función de php error_reporting, o cambiar el primer if de la función.
June 16th, 2006 a las 5:47 pm
Patxi, algo parecido hice… agregue un if con la funcion
if (!isset($_SERVER[’HTTP_X_FORWARDED_FOR’])), gracias por la ayuda…
Saludos …..
June 18th, 2006 a las 4:12 am
Hola a todos, me funciona perfectamente el script, felicitaciones a Patxi por ser desprendida con el conocimiento, sin embargo hay un dato que aun necesito, si bien el script devuelve el IP publico asociada a una maquina cliente, necesito saber ademas el IP privado que tiene, algo asi como aparece en esta pagina: http://www.deltron.com.pe/
Seria bueno que la funcion devuelva un arreglo donde el indice 0 tenga el IP Publico y el indice 1 el Privado.
Podrian ayudarme por favor?
Muchas Gracias
June 19th, 2006 a las 12:16 am
Hola Americo, en principio la mayoría de las veces no es posible obtener la dirección ip privada del usuarios. Ten en cuenta que la mayoría de las conexiones se realizan a través de routers que hacen NAT ocultando los direccionamientos de red internos.
La única situación en la que podría llegar al servidor tu dirección IP privada es si al pasar por un proxy ésta se añade a la cabecera HTTP_X_FORWARDED_FOR. En esta cabecera se van añadiendo al final las direcciones que van “ocultando” los proxys, por lo que en principio la primera “podría” ser tu dirección privada, pero ten en cuenta que depende de que el usuarios salga por un proxy y esté configurado para indicar la dirección ip privada de la conexión, algo no muy normal.
Si en la página que indicas te da tu dirección ip privada será porque sales por un proxy de este tipo, aunque seguramente también se deba a que la página esté utilizando una función de detección de IP incorrecta y no procese bien la cabecera que te indico, porque de hecho, tu dirección ip en internet no es tu dirección privada sino tu dirección pública.
June 21st, 2006 a las 4:30 pm
Hola Francisco, bueno Patxi
, no se si este post va con la tematica de este hilo, pero necesito ayuda con SSL con Apache2 y PHP 5, realmente estoy empeñado en ver como funciona esta tecnologia y no encuentro en ningun lado un ejemplo completo que me permita tener una idea clara de como funcionan las cosas, realmente necesito ayuda, agradeceria mucho su ayuda
Muchas Gracias
Un Abrazo
Americo Torres
June 22nd, 2006 a las 6:58 pm
Bueno explico mejor la situacion en la que me encuentro: Estoy realizando una intranet en la cual existen dos partes bien diferenciadas:
- La primera es la parte operativa donde los cajeros haran operaciones de depositos y retiros.
- La segunda que es la parte de supervision, es donde el Jefe de Operaciones abre el sistema para que los cajeros puedan logearse.
Es esta segunda parte la de mayor cuidado, pues los cajeros ingresan al sistema con un formulario tipico de login (usuario + clave + nivel de acceso), pero en el modulo de supervision deseo agregar la posibilidad de que el supervisor aparte de poner su usuario y clave pegue su llave publica en un textarea y poder validar esto tambien, es una intranet muy sensitiva porke se maneja dinero, de ahi mi extremo cuidado en el diseño de accesos.
Puede alguien mostrarme un codigo que realice esto de la generacion y validacion de llaves, yo he bajado el OpenSSL.
Gracias
June 22nd, 2006 a las 9:58 pm
Pues poco te puedo ayudar con esto… creo que OpenSSL te servirá para generar y validar las claves, y lo único que se me ocurre que te pueda aportar, es que quizás no necesites el textarea para la llave pública, quizás te valga con generar un certificado, instalarlo en el navegador y configurar el servidor de forma acorde, aunque como te digo, poco más te puedo decir, no me ha tocado nunca hacer nada de esto, así que te hablo sólo de lejos.
June 27th, 2006 a las 5:26 pm
Hola Patxi.
Mi nombre es Jose y te felicito por la web.
Tengo dudas con respecto el código web para poder saber las ip de los visitantes.
Aquí tienes el código que le he puesto a mi web:
$ip = getRealIp(log.txt)
El caso es que quiero ver las IP de los visitantes a través de un archivo
(log.txt). Me lo descargo del servidor y está totalmente en blanco.
¿Qué está mal en el código?
June 27th, 2006 a las 9:01 pm
Hola Jose, estás pasando log.txt a la función pero ésta no acepta ningún parámetro. Si lo que quieres es escribir la ip que te devuelve getRealIp en el archivo log.txt lo que tendrías que hacer es ejecutar $ip = getRealIp(); y luego abrir el archivo log.txt en modo escritura (append) y escribir una línea con el valor de la variable $ip. Para ello mira en php.net/fwrite y php.net/fopen.
July 25th, 2006 a las 1:36 am
¿ Como puedo saber la direccion IP de un cliente ?
Les agradeceria mucho si me ayudaran es de suma urgencia ..
ahaha y muy buena esta pagina ..
Felicitaciones..
August 24th, 2006 a las 6:59 pm
como puedo saber la direccion ip de un cliente? y con eso sabre mas informacion del cliente y de su equipo?
August 24th, 2006 a las 8:02 pm
la dirección ip del cliente la puedes obtener (en algunos casos) con el código que se indica arriba. Con eso sabrás la dirección ip, otra cosa es lo que hagas con ella, por supuesto hay cosas que se pueden obtener a partir de ella, pero eso queda fuera de este post
October 12th, 2006 a las 5:57 am
Saludos, disculpa, estoy empezando con esto de php y tengo instalado el easyphp en ambiente windows xp, bueno el chiste es que copie el script del post para probralo, pero resulta que no me aparece nada al momento de ejecutarlo, me podrias decir por favor como hago para que me aparezca en pantalla la ip o lo k tenga k aparecerme, de antemano te agradezco, gracias, nos vemos.
October 12th, 2006 a las 11:03 am
Adrian, lee los comentarios anteriores, está explicado en uno de ellos.
October 13th, 2006 a las 6:37 am
Hola, estoy comenzando en php, esto de como guardar las ip pues no lo entiendo muy bien, ?si alguien pudiera explicarme brevemente esto se lo agradeseria.
November 3rd, 2006 a las 11:37 pm
La dirección IP de la pagina Hotmail es 216.74.180.189
November 3rd, 2006 a las 11:44 pm
La dirección IP de la página www.meebo.com es 65.19.140.246
November 6th, 2006 a las 3:08 am
buena la intencion.. pero he probado la funcion en una pagina de prueba para ver si funciona correctamente..
Separando el tama de proxys, he tratado de ponerla a prueba en uso comun, nmandando el enlace a mi pagina por MSNMessenger y no captura la IP real, sino la IP del mismo MSN.. al igual, con tan solo enviar el enlace por email, con captura el Ip del router del cliente. incluso lo he probado conmigomismo, y solo funciona si se accede directamente a la web.
November 8th, 2006 a las 9:57 pm
Hola, soy nueva programando y necesito que me ayuden en el tema de incluir este código a la página. Yo he hecho lo siguiente
y me sale error. Bueno, en realidad me gustaria guardarlo en un txt, pero no se como hacer esto…podrías ayudarme :S
November 8th, 2006 a las 10:01 pm
Lo que hice fue incluir hacer include(’ip.php’); y luego a una valiable $ip le asigne el valor getIPReal(); por ultimo echo “Su ip es $ip”;
November 10th, 2006 a las 10:13 am
Alisha, la función se llama getRealIP, no getIPReal, quizás sea eso.
November 10th, 2006 a las 6:12 pm
no, me equivoque al escribir aquí, porque no me funciona con copy/paste :O, pero quisiera que me digas como podría hacer para guardar ese dato en un txt, donde crearlo, etc. Gracias !!
Saludos
November 13th, 2006 a las 12:59 am
En un comentario de más arriba explico en unas pocas líneas qué es lo que habría que hacer. Básicamente es abrir un fichero en modo append y luego escribir en él con fwrite. Mira el comentario y la documentación de php sobre fwrite en http://www.php.net/fwrite
Espero que te sirva, un saludo
January 7th, 2007 a las 9:44 pm
saludos,
les comento mi situacion, tengo un formulario simple para capturar datos de contacto con HTML hecho en frontpage, para capturar los datos del formulario y enviarlos a un correo utilizo PHP, como puedo hacer para que ademas de los datos que las persona digitan, automaticamente el formulario me envie la IP publica de donde se genero el envio, GRACIAS
January 8th, 2007 a las 11:12 am
Manuel, si lees el artículo y los comentarios obtendrás la respuesta a la duda que planteas.
January 10th, 2007 a las 12:48 am
El script es excelente. Pero no logro solucionar el problema. En una base de datos Mysql guardo la ip de los que votan en mi encuesta, pero el registro que guarda es la ip de conexión y me pierdo de muchos votos. Existe alguna forma de detectar ip del cliente y no solo de conexión?.
Gracias!
January 10th, 2007 a las 1:46 pm
si te refieres a que puede haber varios usuarios accediendo a tu web con la misma ip pública, y que por lo tanto todos parecen un único usuario, puedes probar varias cosas. Lo más sencillo por ejemplo sería añadir un tiempo de prohibición de repetición de voto más corto, pero podrías utilizar también un identificador de sesión o una cookie generada aleatoriamente, bien por tí manualmente o por algún modulo de apache
January 11th, 2007 a las 5:55 pm
Disculpen que mi pregunta no sea de este tema específicamente, pero estoy tratando de hacer una Intranet donde necesito el uso de sesiones de usuarios. Una forma podría ser evaluando el “usuario”, “contraseña” y “IPdelcliente” (ESTE ARTICULO) como número de sesión, pero con los problemas que se pueden presentar con los Proxys y un futuro acceso por VPN no lo veo conveniente. He escuchado que también se puede por cookies o asignándole un número de sesión a un usuario una vez que se leguee, pero hasta el momento no he encontrado ayuda de estas 2 opciones adicionales para enviar a todas las páginas un usuario resgistrado (logueado). Les agradezco cualquier ayuda.
January 11th, 2007 a las 5:58 pm
Aclaro que los parámetros de “usuario”, “contraseña” y “sesión” deben ser ocultos para evitar que personal cualquiera entre cambiando datos en la ruta ó URL. Gracias
January 11th, 2007 a las 10:03 pm
Tienes información de cómo funcionan las sesiones en php en http://es2.php.net/manual/es/ref.session.php
January 16th, 2007 a las 11:23 pm
¿como puedo saber las personas q visitan mi fotolog??, me dijeron q es mediante le ip, pero no tengo ni idea. gracias
January 25th, 2007 a las 6:23 pm
Muchas gracias Patxi, me fue de mucha ayuda tu link sobre sesiones.
March 11th, 2007 a las 4:07 am
Muy interesante, si bien, he leído por otros sitios, que utilizar HTTP_X_FORWARDED_FOR no es seguro, porque es una variable que puede ser modificada por el usuario. También creo haber leído que el phpbb la utilizaba y tuvo que cambiar de método porque era inseguro. ¿Alguna información al respecto?
Por otro lado, si alguien es tan amable, me gustaría saber algún ejemplo de proxy anónimo. No entiendo muy bien el concepto, ya que aunque un proxy pudiera cambiar la ip aleatoriamente, el propio proxy no tendría una ip?? Si tuviéramos problemas con un usuario conectándose a través de un proxy. ¿no habría forma de bloquear todo ese proxy?
April 12th, 2007 a las 11:43 pm
me parece interesante el tema…gracias yo estudio servidores.y diseño de paginas web no tenia mucha idea como funcionaban los proxys..solo se qeu ocultaban el IP.
April 13th, 2007 a las 10:32 pm
Hola, he usado a perfección tu código… muchas gracias por la ayuda
April 16th, 2007 a las 10:04 pm
[…] Buscando información acerca de obtener la IP real (en los casos en los que fuera posible) me tropecé con un artículo interesante sobre como los distintos proxies alteran los datos del navegador para enmascarar su propia IP. […]
April 17th, 2007 a las 7:23 pm
Hola, a todos espero alguien pueda ayudarme, mi problema esta relacionado con las IP de los equipos que entran en un site para votar en una encuesta, tengo que lograr que solo puedan votar una vez en cada encuesta, soy nueva en estos menesteres asi es que ojalá la explicación sea sencilla.
Saludos y espero su ayuda.
April 18th, 2007 a las 6:57 pm
Estoy usando la funcion getRealIp , bajo la intranet haciendo pruebas y solo me da la ip local en unos casos y en otros(desde linux) solo me da 127.0.0.1, he probado otras paginas y haciertan on mis 2 direcciones la publica y la privada, lo que asumo que mi proxy esta dejandole obtener esas cabeceras… En resumen la funcion no me funciona bajo mi intranet!
April 18th, 2007 a las 6:59 pm
Supongo que el paquete no lleva las cabeceras simplemente por q no
sale del proxy ya que estan en intranet…
Corrijame si estoy errado… Gracias
April 19th, 2007 a las 9:15 am
En efecto Jose Luis, la función está pensada para su uso en internet. Si quieres obtener la dirección en una intranet local “sencilla” debería bastarte con utilizar REMOTE_ADDR. De todas formas yo encapsularía el acceso a esa variable en una función por si luego tienes que cambiar algo, para tocar solo un sitio.
El caso en el que te da 127.0.0.1, ¿es cuando accedes al web desde el propio servidor que lo contiene?. Si es así tiene sentido ya que estaría accediendo a él a través del interfaz loopback.
April 27th, 2007 a las 12:56 am
Desde Argentina, fenomenal el artículo, la función y el trabajo de contestar todas las preguntas!!!!
Grande Patxi!!!
April 27th, 2007 a las 2:25 am
Hola .. (tambien desde ARG.) muy bueno el articulo Patxi. De muchisima utilidad!. muy bien explicado. sos un fenomeno!
May 4th, 2007 a las 3:06 pm
Excelente. solo lo copie y pegue y funciono inmediatamente. Gracias.
May 25th, 2007 a las 11:54 pm
Hola patxi, por lo que veo tu eres lo mejor que hay en el site, y yo soy el peor, necesito ayuda, soy extremadamente nuevo en esto del php, tengo php y mysql5, quiero guardar en mysql las dirección ip que visitan mi sitio, y despues manipularlo para presentar reportes,, pero no tengo idea, aqui psan muchas opiniones, pero no se cual me sirve a mi en especifico !! ya tengo un contadoy y escribe la ip de donde se conectan, pero no se como guardarla!! gracias!!
May 27th, 2007 a las 3:14 am
Hola, me gustaria saber como encontrar el ip de un usuario en un foro? por favor ayudenme. GRACIAS
June 14th, 2007 a las 4:05 pm
Hola a todos!
Solo me gustaria saber como pudo hacer para ver el numero de IP de los usuarios desde el msn messenger (windows live messenger)
Gracias!
Espero poder obtener la respuesta correcta!
Saludos!!
July 10th, 2007 a las 8:55 pm
Buen trabajo el q realiza esta funcion , felicitaciones!!.
Creo q esto tambien se puede hacer capturando la direccion MAC del cliente de la siguiente manera:
$remoteIp = rtrim($_SERVER[’REMOTE_ADDR’]);
$location = rtrim(`arp -a $remoteIp`);
print_r($remoteIp.$location);//display
$location = preg_replace(’/\s+/’, ’s’, $location);
$location = split(’\s’,$location);//
$num=count($location);//get num of array elements
$loop=0;//start at array element 0
while ($loopClient MAC Address:- “.$location[$loop].”";
$_SESSION[’MAC’] = $loop;
return;
}
else {$loop=$loop+1;}
}
quizas este codigo le sirva a alguien q al igual q yo desea la direecion mac.
aunque si estas trabajando en una red bajo un servidor proxy creo q pasara lo mismo q en la funcion getRealip en donde si el servidor proxy es de alta confidencialidad solo se vera la dierccion mac de dicho proxy.
July 24th, 2007 a las 12:43 am
Muy bueno y muchas gracias
July 24th, 2007 a las 3:52 am
Muy buen articulo
En verdad que me parecio de mucha utilidad, me aclaro algunos conceptos que no tenia muy claros
Se agradece
SL2
August 10th, 2007 a las 1:16 am
Felicitaciones por el artículo, de verdad muy bueno!
Salu!2
August 31st, 2007 a las 6:25 am
Me pueden decir como hago para consegir el IP de una página web
October 19th, 2007 a las 8:07 am
javier:
desde una consola de msdos pon el comando
ping “pagina web”
ejemplo: ping www.yahoo.com
al indicar los paquetes enviados propios del comando ping, te dara el IP de la direccion web , en este ejemplo la de yahoo….
December 13th, 2007 a las 1:16 am
disculpen una preganta como puedo ocultar mi IP. = me lo detecta en la pagina, no se que hacer.
E usado diferentes proxis tor, hide ip ani…
ayuda porfavor q de debo hacer
la pagina q bloqueo es cabal online no permite q me resgistre
January 26th, 2008 a las 12:21 am
Una pregunta como puedo saber el IP de un correo recibido desde un correo de Yahoo hay forma??
Mil gracias me urge la información porque alguien esta acosando a mi novia y queremso saber la identidad de esta persona
el correo de la otra persona es de hotmail
February 7th, 2008 a las 8:20 pm
Yo ya tengo la IP pero se puede saber quien lo envio?? como puedo saber quien es la persona?? me urge esta informacion si alguien pudiera ayudarme por favor!!!
February 7th, 2008 a las 8:25 pm
Hola Roberto, si se puede!! no se muy bien como se logra, alguien me ayudo a mandar mis correos de yahoo a outlook y ahi de alguna manera se ve la IP, espero esto te ayude.. aunque lo importante es saber como hacer para saber de quien es esa IP, si logras tenerla y saber como, te agradeceria me informaras, gracias!
February 25th, 2008 a las 11:37 pm
Hola necesito ver la ip de un correo de hotmail alguien puede decirme como se ahce se lo agradecere mucho
March 19th, 2008 a las 2:33 pm
Hola Patricia.
Muy bueno el articulo y el script, gracias.
Me pasa algo muy gracioso, pero que ya me tiene al borde del colapso existencial… y es que tu script me funcionaba perfectamente hasta hace poco, y de repente… empezo a mostrar un error en tiempo de ejecución…por sintaxis… justo en esta linea:
reset($entries);
lo que es extraño, pues antes funcionaba y ahora dice que hay error de sintaxis… y justo en esta linea donde no se ve nada…
Que crees que pueda estar pasando?
Saludos
March 20th, 2008 a las 11:34 pm
Hola
Necesito ayuda,
Ok ya tengo el php, yo quiero algo sencillo, que en una pagina html se muestre el ip de la persona que la abra.
Gracias
PD patricia y roberto lo que piden se hace muy sencillo, al bajar los correos por el outlook (tanto yahoo como hotmail se pueden bajar) solo tienes que dar click derecho al mensaje en outlook y ver las propiedades, en los detalles… origen del mensaje… y ya tienes al victimario
March 25th, 2008 a las 12:57 am
Gracias Ya logre resolver