Inicio > Programación > Ip Proxy PHP script

Ip Proxy PHP script

Voy a explicar un script de PHP muy simple, muchos puede que ya lo conozcan. Se trata de un script que nos envía a un correo electrónico la Ip del usuario e información sobre el mismo. Si utiliza un proxy indicara la ip del proxy.

if (isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]))

{

$ip = $HTTP_SERVER_VARS[“HTTP_X_FORWARDED_FOR”];

$array = split(“,”,$ip);

$ip_proxy = $array[0];

$host = @gethostbyaddr($ip_proxy);

if ($ip_proxy == $host)

{

$validar= 1 ;

}

else

{

$validar= 2 ;

}

}

else

{

$ip = $HTTP_SERVER_VARS[“REMOTE_ADDR”];

$host = @gethostbyaddr($ip);

$ipreal = $host;

echo “Direccion IP : ” . $host;

}

//URL de procedencia de la visita

$procedencia=$HTTP_REFERER;

// Detección del navegador

$agente = $HTTP_SERVER_VARS[“HTTP_USER_AGENT”];

$navegador = “Otro”;

if(ereg(“Opera”, $agente))$navegador = “Opera”;

elseif(ereg(“MSIE”, $agente))$navegador = “MS Internet Explorer”;

elseif(ereg(“Lynx”, $agente))$navegador = “Lynx”;

elseif(ereg(“WebTV”, $agente))$navegador = “WebTV”;

elseif(ereg(“Konqueror”, $agente))$navegador = “Konqueror”;

elseif((ereg(“Nav”, $agente)) || (ereg(“Gold”, $agente)) || (ereg(“X11”, $agente)) || (ereg(“Mozilla”, $agente)) || (ereg(“Netscape”, $agente)))$navegador = “Netscape”;

// Deteccion del sistema operativo

$so = “Otro”;

if(ereg(“Win”, $agente))$so = “Windows”;

elseif((ereg(“Mac”, $agente)) || (ereg(“PPC”, $agente))) $so = “Mac”;

elseif(ereg(“Linux”, $agente))$so = “Linux”;

elseif(ereg(“FreeBSD”, $agente))$so = “FreeBSD”;

elseif(ereg(“SunOS”, $agente))$so = “SunOS”;

elseif(ereg(“IRIX”, $agente))$so = “IRIX”;

elseif(ereg(“BeOS”, $agente))$so = “BeOS”;

elseif(ereg(“OS/2”, $agente))$so = “OS/2”;

elseif(ereg(“AIX”, $agente))$so = “AIX”;

if ($validar == 1)

{

$ip=$host;

$texto = “Direccion ip :”;

}

else

{

$ip=$ip_proxy;

$texto = “Direccion ip PROXY :”;

}

$mensaje = $texto . ” ” .$ip . “\n Agente del navegador : ” . $agente . “\n Navegador : ” . $navegador . “\n Procedencia : ” . $procedencia . “\n SO : ” .$so ;

mail (“correo electronico”,”ip”,$mensaje)

Ahora pasare a explicar el código:

if (isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]))

Aquí se comprueba si la variable HTTP_SERVER_VARS[“HTTP_X_FORWARDED_FOR”] esta vacía. Si no esta vacía, pasaremos dentro del if.

i$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];

Guardamos el valor de la variable en otra variable llamada $ip. El valor de la variable $HTTP_SERVER_VARS[“HTTP_X_FORWARDED_FOR”] es la ip con la que llegamos a la pagina.

$array = split(",",$ip);

$ip_proxy = $array[0];

La función split separa los valores (si hay mas de uno) de la variable $ip por comas. Nosotros como queremos solo el 1º valor (la ip), metemos en la

variable $ip_proxy un array con la posicion 0.

$host = @gethostbyaddr($ip_proxy);

Metemos en la variable $host el nombre de la maquina de la dirección IP.

if ($ip_proxy == $host)

{

$validar= 1 ;

}

else

{

$validar= 2 ;

}

Ahora comprobamos si la variable $ip_proxy es igual a la variable $host. Si es así la variable $validar toma el valor de 1 y si no toma el valor de 2. Si las variables tuvieran el mismo valor es por que no esta usando un proxy, si tienen distinto valor esta usando un proxy.

else

{

$ip = $HTTP_SERVER_VARS[“REMOTE_ADDR”];

$host = @gethostbyaddr($ip);

$ipreal = $host;

echo “Direccion IP : ” . $host;

}

}

Este es el else del primer if, en caso de que la variable $HTTP_SERVER_VARS[“HTTP_X_FORWARDED_FOR”] estuviera vacía, recogemos el valor de la ip, y la muestra.

Ya tenemos la ip y sabemos si utiliza proxy o no. Ahora recogeremos la información adicional.

$procedencia=$HTTP_REFERER;

Esta linea guarda la dirección de donde procede la visita. Si es una visita directa la variable estará vacía.

$agente = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];

$navegador = “Otro”;

if(ereg(“Opera”, $agente))$navegador = “Opera”;

elseif(ereg(“MSIE”, $agente))$navegador = “MS Internet Explorer”;

elseif(ereg(“Lynx”, $agente))$navegador = “Lynx”;

elseif(ereg(“WebTV”, $agente))$navegador = “WebTV”;

elseif(ereg(“Konqueror”, $agente))$navegador = “Konqueror”;

elseif((ereg(“Nav”, $agente)) || (ereg(“Gold”, $agente)) || (ereg(“X11”, $agente)) || (ereg(“Mozilla”, $agente)) || (ereg(“Netscape”, $agente)))$navegador = “Netscape”;

$so = “Otro”;

if(ereg(“Win”, $agente))$so = “Windows”;

elseif((ereg(“Mac”, $agente)) || (ereg(“PPC”, $agente))) $so = “Mac”;

elseif(ereg(“Linux”, $agente))$so = “Linux”;

elseif(ereg(“FreeBSD”, $agente))$so = “FreeBSD”;

elseif(ereg(“SunOS”, $agente))$so = “SunOS”;

elseif(ereg(“IRIX”, $agente))$so = “IRIX”;

elseif(ereg(“BeOS”, $agente))$so = “BeOS”;

elseif(ereg(“OS/2”, $agente))$so = “OS/2”;

elseif(ereg(“AIX”, $agente))$so = “AIX”;

Con la variable $HTTP_SERVER_VARS[“HTTP_USER_AGENT”] comprobamos el tipo de navegador y el SO que esta usando el usuario.

if ($validar == 1)

{

$ip2=$host;

$texto = “Direccion ip :”;

}

else

{

$ip2=$ip_proxy;

$texto = “Direccion ip PROXY :”;

}

$mensaje = $texto . ” ” .$ip . “\n Agente del navegador : ” . $agente . “\n Navegador : ” . $navegador . “\n Procedencia : ” . $procedencia . “\n SO : ” .$so ;

Después vamos a formar el mensaje para enviar la información por correo, si $validar es uno (recordar al principio del script), se guarda en la variable $ip2 la dirección ip y si es 2 se guarda la ip del proxy.

En la variable $mensaje creamos en mensaje, vamos concatenando todas la variables.

mail ("direccion de correo","ip",$mensaje)

Usamos la función mail de PHP para enviar el correo.

Recordar que el servidor donde alojéis el script debe tener el servidor SMTP en on.

Aquí os dejo una pagina con algunos enlaces a proxys para cuando probéis el script.

Dejo el script para descargar.

Anuncios
Categorías:Programación Etiquetas: ,
  1. diciembre 8, 2009 en 10:19 am

    Waw, muchas gracias por el Script, me fue súper útil!
    Gracias por pasarte por nuestro blog, estamos en contacto 😉

    • diciembre 8, 2009 en 4:20 pm

      me alegro de que te sirviera 🙂

  2. Anonimat0n
    diciembre 8, 2009 en 6:40 pm

    Muy bueno ElWood !

  3. diciembre 9, 2009 en 1:08 am

    Muy bueno, pasaré por aquí de vez en cuando. 🙂

    Saludos! 😉

  4. Cluster
    enero 10, 2010 en 12:21 pm

    Deben usar $_SERVER en lugar de $HTTP_SERVER_VARS como variables superglobales.

    Todavía me extraña ver scripts y tutoriales que usan el viejo método cuando hace ya bastante años que PHP viene diciendo que va a dejar de usar dicha nomenclatura de acceso a las variables superglobales.

    Les invito a leer:
    http://www.php.net/manual/en/language.variables.superglobals.php

    Un saludo,

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: