borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Bookmarklets Nuevo
  2. Recetario básico para CakePHP/2 Nuevo
  3. Certificado auto-firmado Nuevo

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Reiniciar secuencia
  4. Vaciar un esquema
  5. Certificado auto-firmado
Compartir esta página

IP estimada

Conocer la dirección IP real de nuestra visitas no siempre es posible... ni útil. Esta función devuelve la IP que se esconde detrás del último proxy (si lo hay y no se esconde) o la IP que ha pedido la página (en caso contrario).

/** * Devuelve la IP cliente estimada de la conexión actual (según la información facilitada por el proxy) * * @return string Direccion IPv4 * * @version 2015-09-06 */ function ip_estimada(){     if( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']!='' ){         list($ip) = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'], 2);         return $ip;     }else{         return $_SERVER['REMOTE_ADDR'];     } }

La variable HTTP_X_FORWARDED_FOR es una lista de IPs separadas por comas, que se van añadiendo a medida que la petición atraviesa proxies. Aunque depende de que el proxy rellene correctamente la variable, en la práctica va razonablemente bien.

El rollete teórico

A quien más y quién menos le ha sucedido: al ir a descargar setup.exe desde una página que no habías visitado jamás en la vida, el servidor te lo deniega argumentando que has superado el límite diario de descargas. What??? La explicación es muy sencilla: el webmaster de la página identifica a sus visitantes por la dirección IP que se conecta para pedir la página. Sin embargo, el que se conecta al servidor web es, con frecuencia, un proxy-caché del proveedor de Internet. Para ese webmaster, ¡los 500 usuarios de Telefónica que se han bajado setup.exe son el mismo!

No siempre es posible conocer la dirección IP del ordenador desde el que nos ven porque el intermediario muchas veces no nos la dice. Y tampoco es siempre útil, porque con frecuencia se trata de una dirección IP privada (p. ej. 192.68.1.33) que sólo funciona dentro de su red local.

Por ejemplo

Anselmo navega por Internet con su fiel módem de 56K y la tarifa plana de Acme Telekom. Todos los domingos arranca su Internet Explorer y abre Google para buscar recetas de pollo.

Benito también tiene módem de 56K, pero su proveedor tiene un proxy-caché transparente para ahorrarse unos duros en la factura del ancho de banda. Benito es un fan de Britney Spears y busca información en Google (sección "Imágenes") con su Firefox tuneado.

Carlota navega a velocidades de vértigo con su router ADSL, al que tiene conectados dos ordenadores y una tostadora de pan. Le gustan los gatos.

Bonito diagrama de red Anselmo tiene salida directa a Internet, IP pública y ningún proxy-caché intermedio: su PC habla directamente con el ordenador del Sr. Google.

Benito también tiene salida directa e IP pública, pero es el proxy-caché el que habla en su nombre con el Sr. Google.

Carlota está en una red local y tiene IP privada. Esa IP sólo es válida en su pequeña red: le sirve para comunicarse con el PC de su hermano, pero nadie puede alcanzarla desde Internet. Su interlocutor es el router ADSL, que tiene una IP pública que comparten Carlota y su hermano. A su vez, éste habla con el Sr. Google a través del proxy-caché. Milagrosamente funciona.

A Demetrio lo hemos dibujado para ilustrar que una IP privada, como sólo es válida en redes locales, puede ser usada a la vez por más de un PC, siempre que sean de redes locales diferentes.

De este embrollo sale que Google conoce la IP de Anselmo, puede estimar la de Benito y no tiene ni idea de cuál es la de Carlota (ni le serviría de nada), pero puede estimar la de su router. Usando la directamente la IP de REMOTE_ADDR podría contar las visitas de Anselmo, pero sería incapaz de distinguir entre Benito, Carlota y el hermano de Carlota. Con ip_estimada() podría distinguir a Benito de Carlota & bros. En ningún caso le serviría para diferenciar las visitas de Carlota de las de su hermano.

Actualización: aparentemente Telefónica se ha deshecho de sus proxies transparentes desde que se publicó este artículo. Pobrecicos, los tengo acojonados.

Historial

v2015-09-06
Documentación en formato phpdoc.
Contemplar encabezados X-Forwarded-For vacíos.
v2008-08-26
Primera versión.

Esta página ha sido impresa el sábado 23 de septiembre de 2017 (02:22:45 +0200) desde http://borrame.com/recortes/php/ip-estimada.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2017 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com