Un Navegador Web Anonimo en Perl
Christian Gustavo Riva
Existen muchos sitios en
Internet que te permiten navegar en forma anonima a traves de la red. Entras
la direccion Web a donde quieres ir, y estos se encargan de aparecer en
los identificadores de IP/Host como responsables de las conexiones.
En principio, lo que estos
sitios hacen es actuar como mediadores entre tu peticion (una direccion
Web) y el destino (el servidor que aloja al sitio solicitado).
Cuando el servidor destino
recibe la peticion, reconoce como unico autor de la misma al servidor mediador,
y este ultimo finalmente te entrega los resultados en forma (casi) transparente.
A traves del siguiente codigo
podras ver una de las formas en las cuales puedes crear un script que actue
como mediador entre la peticion de un cliente y el servidor destino final,
haciendo que en los registros de este ultimo figure unicamente la direccion
IP del servidor donde se encuentra alojado el
script y no la del cliente
real.
Como veras en el codigo,
la mayor parte del trabajo son las modificaciones que hay que hacerle a
las paginas antes de enviarselas al cliente, ya que debemos:
-
Reconocer los enlaces relativos
y recomponerlos como enlaces absolutos, para poder apuntarlos luego hacia
el script ("pagina.htm" => "http://www.destino.com/pagina.htm"), salvando
todas las alternativas posibles (directorios, etc).
-
Agregar a todos los enlaces
una referencia a nuestro script para poder continuar navegando a traves
del mismo.
-
Agregarles a todas las imagenes
la ubicacion original de las mismas, ya que al mostrar la pagina al cliente
cualquier referencia de archivos que no sea absoluta (http://..) por omision
se entendera que los mismos estan en nuestro servidor ("imagen.gif" =>
"http://www.nuestro-servidor.com/imagen.gif").
Y muchas variantes mas que deberas
atender y mejorar si quieres continuar el desarrollo de este script, como
ser el uso de formularios Web, controlar errores, etc.
Para implementarlo deberas
generar el archivo anonimo.pl con el codigo listado, copiarlo a tu FTP
y asignarle los permisos correspondientes de ejecucion.
Y para navegar a traves
del script ingresa la direccion destino como aparece a continuacion:
http:///www.tudominio.com/ruta_del_script/anonimo.pl?http://www.direccion-a-visitar.com
Recuerda que el codigo es
para uso libre y su finalidad es introducirte en los conceptos que trata
y animarte a que experimentes por tu cuenta.
ANONIMO.PL
###################################
# (C) 2001
Christian Gustavo Riva #
# https://www.programasprogramacion.com
#
###################################
#!/usr/bin/perl
use LWP::Simple;
## Declaramos
el modulo LWP ya que vamos a utilizar la funcion
## get() del
mismo para peticionar las paginas Web.
print "Content-type:
text/html\n\n";
## Definimos
al cliente la salida que daremos: html
$script = "http:///www.tudominio.com/ruta_del_script/anonimo.pl?";
## Asignamos
a la varible $script la direccion EXACTA donde se
## encuentra
el script seguido por un signo de interrogacion (?).
## Esta variable
la pegaremos delante de todas las referencias hacia
## otros enlaces
en la pagina final, asegurandonos de esta forma
## que el
cliente pueda continuar navegador a traves del script.
$destino =
$ENV{'QUERY_STRING'};
## Asignamos
a la variable $destino todo lo que enviemos al script
## seguido
al signo ?
## En este
caso debera ser la direccion Web completa donde se
## quiera
ingresar.
$directorio
= $destino;
## A continuacion
buscamos y formamos el path absoluto de la direccion
## destino
a partir de todas las variantes posibles, para poder luego
## componer
los enlaces que aparezcan en forma relativa dentro de la
## pagina
final.
if( $directorio
!~ m|/$| )
## Si el $destino
no es del tipo:
## http://www.direccion.com/
## http://www.direccion.com/carpeta/
{
if( $directorio
!~ m|http://(.*)/([^.]+)$|i )
## Si el $destino
es del tipo:
## http://www.direccion.com/pagina.htm
## http://www.direccion.com/carpeta/pagina.htm
{ $directorio
=~ s|http://(.*)/(.*)$|http://$1|i; }
## Armamos
el path absoluto extrayendo los
## nombres
de pagina.
}
$directorio.="/"
if( $directorio !~ m|/$| );
## Nos aseguramos
un slash al final del path absoluto.
$pagina=get($destino)
|| die "Imposible abrir:\n$destino";
## Asignamos
a la variable $pagina el contenido de la pagina Web
## solicitada,
utilizando la funcion get() del modulo LWP.
$pagina =~
s|<title>(.*)?</title>|<title>** Navegador Anonimo **
$1</title>|gi;
## Agregamos
al titulo de la pagina un identificador para
## el usuario
sobre su condicion de Anonimo al navegarla.
$pagina =~
s|<a href[\s]?=[\s]?["']?(?=http)([^\s"'>]+)["']?|<a href="$script$1$2"|gi;
## Apuntamos
hacia el script todos los enlaces absolutos
## de la pagina
original (solo HTTP).
$pagina =~
s|<a href[\s]?=[\s]?["']?(?!http)([^\s"'>]+)["']?|<a href="$script$directorio$1"|gi;
## Apuntamos
hacia el script todos los enlaces relativos
## de la pagina
original, componiendolos previamente
## como absolutos
(variable $directorio).
$pagina =~
s|<img(.*)src[\s]?=[\s]?["']?(?!http)([^\s"'>]+)["']?|
<img$1src="$directorio$2"|gi;
## Y finalmente
componemos los path relativos de las
## imagenes
para que sean absolutos
## (de otra
forma serian peticionadas en el servidor
## del script,
donde no se encuentran).
print $pagina;
## Enviamos
la pagina modificada al cliente.