He estado revisando diversos redirectores para squid escritos en Perl, entre los cuales conseguí uno que me funciona muy bien pero quiero hacerle modificaciones.
Este script fue escrito por el señor Victor Carceler:
http://iespuigcastellar.xeill.net/Members/vcarceler/temp/welcomeredirector.pl/view
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# WelcomeRedirector v0.2 (por Victor Carceler)
#
# Este script es software libre GPL
#
# Este script es un redirector para Squid (http://www.squid-cache.org/Doc/FAQ/FAQ-15.html)
# Cuando Squid recibe una petición, se la pasa a WelcomeRedirector y el script retorna
# la URL que Squid debe retornar al cliente.
#
# Si es la primera vez que el cliente realiza la petición, o hace más de TIMEOUT segundos
# desde la última petición, el cliente es dirigido a URL. En caso contrario el cliente
# obtiene el documento que pidió.
# NO_REDIRECT_PREFIX indica un prefijo que si se encuentra en la dirección del cliente
# evitará que sea redirigido (aunque sea la primera conexión).
#
# Para que Squid utilice este software debe configurar la directiva redirect_program
# y redirect_children (con valor 1) en squid.conf
my $TIMEOUT = 3600;
my $URL = "http://iespuigcastellar.xeill.net/activitats/xeill";
my $NO_REDIRECT_PREFIX = "192.168";
$|=1;
my %registro;
while (<>) {
@X = split;
$url = $X[0];
$address = $X[1];
$ident = $X[2];
$method = $X[3];
#print "Petición: $url -> $address -> $ident -> $method\n";
my $registrado = 0;
# Sólo redirigimos peticiones que no coinciden con NO_REDIRECT_PREFIX
if ($address !~ /$NO_REDIRECT_PREFIX/) {
# Tenemos $address registrada ?
my @ips = keys %registro;
foreach(@ips) {
if ($_ == $address) {
if ((time - $registro{$address}) >= $TIMEOUT) {delete $registro{$address};
} else {
$registrado = 1;
#print "Tengo la ip registrada !!!";
}
}
}
} else {
$registrado = 1; # Nos saltamos la redirección
}
if (! $registrado) {
$url = $URL;
print "302:$url\n";
$registro{$address}=time;
} else {
print "$url\n";
}
}
#
# WelcomeRedirector v0.2 (por Victor Carceler)
#
# Este script es software libre GPL
#
# Este script es un redirector para Squid (http://www.squid-cache.org/Doc/FAQ/FAQ-15.html)
# Cuando Squid recibe una petición, se la pasa a WelcomeRedirector y el script retorna
# la URL que Squid debe retornar al cliente.
#
# Si es la primera vez que el cliente realiza la petición, o hace más de TIMEOUT segundos
# desde la última petición, el cliente es dirigido a URL. En caso contrario el cliente
# obtiene el documento que pidió.
# NO_REDIRECT_PREFIX indica un prefijo que si se encuentra en la dirección del cliente
# evitará que sea redirigido (aunque sea la primera conexión).
#
# Para que Squid utilice este software debe configurar la directiva redirect_program
# y redirect_children (con valor 1) en squid.conf
my $TIMEOUT = 3600;
my $URL = "http://iespuigcastellar.xeill.net/activitats/xeill";
my $NO_REDIRECT_PREFIX = "192.168";
$|=1;
my %registro;
while (<>) {
@X = split;
$url = $X[0];
$address = $X[1];
$ident = $X[2];
$method = $X[3];
#print "Petición: $url -> $address -> $ident -> $method\n";
my $registrado = 0;
# Sólo redirigimos peticiones que no coinciden con NO_REDIRECT_PREFIX
if ($address !~ /$NO_REDIRECT_PREFIX/) {
# Tenemos $address registrada ?
my @ips = keys %registro;
foreach(@ips) {
if ($_ == $address) {
if ((time - $registro{$address}) >= $TIMEOUT) {delete $registro{$address};
} else {
$registrado = 1;
#print "Tengo la ip registrada !!!";
}
}
}
} else {
$registrado = 1; # Nos saltamos la redirección
}
if (! $registrado) {
$url = $URL;
print "302:$url\n";
$registro{$address}=time;
} else {
print "$url\n";
}
}
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
El script funciona a la perfección...
Ahora bien, lo que quiero hacer son básicamente dos cosas.
1. agregarle un log: que me registre la IP del cliente en cada redirección.
2. que redireccione dependiendo de la IP del cliente. Es decir, quiero crear un archivo txt en el cual tenga una lista de IP:
- Código: Seleccionar todo
192.168.50.2
192.168.50.5
Les comento lo siguiente:
Trabajo en una distro de Linux llamada brazilfw (firewall and router) totalmente gratuita, http://www.brazilfw.com.br; en dicho foro me desempeño como developer (equipo de desarrollo), para el cual he realizado algunos addons en bash. Pero de Perl realmente tengo como 2 días estudiándolo.
Me apena pedirles ayuda tan directamente (bandeja de plata), pero lo que realmente pido es orientación, ideas...
La finalidad de este script es hacer llegar un mensaje a determinado grupo de usuarios de una red (bienvenidas, avisos, etc).
Muy agradecido por sus respuestas.
Angel Ruiz.