Saludos.
Me gustaría limpiar este
post, se me alargó mucho y podría causar confusiones a quien lo lea.
En resumen. El código que fui armando parece una represa con goteras
.
Cometí el error de no fijarme a fondo en el código de mi amigo Explorer.
Comencé desde cero. En base al código del amigo Explorer (le agregué unas nuevas líneas para extender los diferentes tipos de redirecciones que quiero.
El nuevo código quedo así:
Using perl Syntax Highlighting
#!/partition/perl/bin/perl
#
$| = 1; # no caché
my $TIMEOUT = 60;
my $URL = "http://192.168.50.1:560";
my $NO_REDIRECT_PREFIX = qr(10\
.250
);
my $BX = "http://192.168.50.1:559";
my $PH = "http://192.168.50.1:561";
my %registro; # memoria de las IP vistas
# Acá leo las IP
$file= "/partition/trabajo/lisip.conf";
open(DATOS
, "<$file");
my @lineas = <DATOS>;
chomp @lineas;
close(DATOS
);
$bfile= "/partition/trabajo/block";
open(BLOCK
, "<$bfile");
my @stopp = <BLOCK>;
chomp @stopp;
close(BLOCK
);
$cfile= "/partition/trabajo/listanegra.conf";
open(PROH
, "<$cfile");
my @prohi = <PROH>;
chomp @prohi;
close(PROH
);
while (<>) {
my ($url, $address, $ident, $method) = split;
#print "Petición: $url -> $address -> $ident -> $method\n";
for $denied (@stopp) { # ¿Es una de nuestras @lineas?
$st = "$denied/-";
next if $st ne $address; # No, seguimos buscando
$url = "302:$BX"; # Sí, cambiamos la $url
last; # Y salimos
}
# Sólo redirigimos peticiones que no coinciden con NO_REDIRECT_PREFIX
if ($address !~ /$NO_REDIRECT_PREFIX/) {
# ¿Tenemos $address registrada?
my $registrada = 0; # De momento, no
for my $ip (keys %registro) {
next if $ip ne $address; # Seguir buscando mientras no la encontremos
# Si la encontramos,
$registrada = 1; # En principio, decimos que está registrada
if ((time - $registro{$ip}) >= $TIMEOUT) { # Pero, ¿demasiado tiempo?
delete $registro{$ip}; # Sí, la olvidamos
$registrada = 0; # Y no está registrada
}
last; # Se acabó la búsqueda
}
if (!$registrada) { # No está $registrada
for $linea (@lineas) { # ¿Es una de nuestras @lineas?
$paz = "$linea/-";
next if $paz ne $address; # No, seguimos buscando
$url = "302:$URL"; # Sí, cambiamos la $url
$registro{$address} = time; # La registramos
last; # Y salimos
}
}
}
for $ngr (@prohi) { # ¿Es una de nuestras @prohi?
$nunc = "$ngr/";
next if $nunc ne $url; # No, seguimos buscando
$url = "302:$PH"; # Sí, cambiamos la $url
last; # Y salimos
}
print "$url\n";
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Cumple al 100% además que es mucho más rápido.
1- tenemos una lista de IP llamada BLOCK, es un archivo que contiene:
- Código: Seleccionar todo
192.168.10.3
192.168.10.5
192.168.10.6
los clientes que coinciden con dicha IP siempre serán redireccionados a una página (bloqueados).
2- hay una segunda lista de IP llamada lisip.conf,
- Código: Seleccionar todo
192.168.10.4
192.168.10.33
los clientes que coinciden con dicha lista serán redireccionados a una página con determinado aviso, a diferencia de que esta redirección es temporal. Después de ser redireccionados una vez el
script los libera y deja navegar. El
script tiene una variable llamada $TIMEOUT = 3600; que indica que si este usuario contenido en lisip.conf después de la primera redirección dejó de navegar durante 3600 seg. será redirigido nuevamente a la página del aviso (no sé si me expliqué bien).
3. El archivo listanegra.conf, contiene una lista de URL.
- Código: Seleccionar todo
http://www.redtube.com
http://www.petardas.com
a las cuales ningún usuario podrá acceder.
Lo que no logro es agregar la cuarta y última tarea:
Crear un archivo así:
- Código: Seleccionar todo
http://www.cantv.net http://www.mipagina.com
http://www.otra.com http://www.esta.com
con la intención de que si es solicitada la página de
http://www.cantv.net, sea cambiada por
http://www.mipagina.comSi es solicitada
http://www.otra.com sea reemplazada por
http://www.esta.com.
Saludos.