Creo que una vez ya lo comente , pero sigue sin resolver.
Puede ser bastante desagradable.
el generador de diccionarios , "generadordiccio" , ...tiene el parametro LONGITUD , para definir pero lo que hace es
generar desde 0 caracteres hasta el tope que le pongamos en LONGITUD
si por ejemplo , pones longitud 8 , caracteres 123
pues empieza generando de 8
11111111
11111112
11111113
PERO , cuando se acaban las cobninaciones de 8 , sigue generando ,todas las de longitud 7 ... 6 ...5
creando un diccionario , mas grande de la cuenta , ademas metiendo muchas keys que no valen (menos de 8 no valen en wpa/wpa2) , si es un ordenador lento , puede traducirse en horas de soplar al aire ..por que no valdra de nada.
LONGITUD 8 , es el menor de los dramas ...
imagina que haces de longitud 10 , pues cuando acaba las combinaciones de longitud 10 , tambien va a generar las de longitud 9 , 8 ,7 .6 ....
es un bug , relativamente gordo.
podeis probar a generar un txt de longitud 8 con caracteres 1234 , asi sera pequeño y podreis verlo con ele ditor de texto ... pues mirad al final del dicc ... y vereis lo que digo.
dejo el code, por si alguien sabe como reparar eso ...
__________________________________________________________________________________________________________
#!/usr/bin/python
#
# :: Invasion Tux
# :: Ultima modificacion : miercoles, 14 de enero de 2009
# :: Script realizado por makiolo (makiolo@gmail.com) (Licencia Creative Commons con reconocimiento)
# :: Ultima version : http://blogricardo.wordpress.com/2008/12/28/script-para-generar-diccionarios-de-fuerza-bruta/
# :: Dependencias : python
#
import sys, math
from time import time, localtime, strftime
########################### CONFIGURACION #########################
LONGITUD = 8
ALFABETO = "abcde"
####################################################################
########################## FUNCIONES ###############################
def getVariacionesConRepeticion(ALFABETO , LONGITUD):
sumatorio = 0
for i in range(LONGITUD):
producto = 1
for j in range(i+1):
producto = producto * len(ALFABETO)
sumatorio = sumatorio + producto
return sumatorio
def eventoPalabraGenerada(palabra):
print palabra
####################################################################
##################### VARS AUXILIARES ##############################
DEBUG = True
VERBOSE = True
variacionesConRepeticion = getVariacionesConRepeticion(ALFABETO , LONGITUD)
inicioReloj = time()
cont = 0
progreso = 0
####################################################################
while LONGITUD > 0:
try:
contadores = [] # ponemos los contadores a 0
for i in range(LONGITUD):
contadores.append(0)
fin = False
while not fin:
if DEBUG == True:
palabra=[] # Creas una lista vacia (y liberas de paso)
for i in range(LONGITUD):
palabra.append(ALFABETO[contadores[i]]) # Vas metiendo al final letra a letra
eventoPalabraGenerada("".join(palabra)) # Envias a tu callback tada la lista unida
if VERBOSE == True:
if (cont % 600000 == 0) and (cont != 0):
progreso = cont*100.0/variacionesConRepeticion # porcentaje hasta ahora
progreso = round(progreso , 2)
finReloj = time() - inicioReloj # finReloj es lo que esta tardando el calculo
velocidad = cont / finReloj # palabras procesadas por segundo
velocidad = round(velocidad , 2)
estimado = finReloj * variacionesConRepeticion / cont # es lo que se estima en realizar todo el proceso
restante = estimado - finReloj # es lo que se estima en realizar lo restante
restante = restante / 60 / 60 # lo pasamos a horas
restante = round(restante , 2)
sys.stderr.write(str(progreso)+"% - Quedan "+str(restante)+" horas. La velocidad es de "+str(velocidad)+" palabras/seg\n")
cont = cont + 1
actual = LONGITUD - 1 # Pongo actual a la derecha del todo
contadores[actual] = contadores[actual] + 1 # Sumo 1 a las unidades
while(contadores[actual] == len(ALFABETO)) and not fin: # Propago el carry
if(actual == 0):
fin = True # FIN
else:
contadores[actual] = 0 # reinicia el actual contador
actual = actual - 1 # avanza a la izquierda
contadores[actual] = contadores[actual] + 1 # y le sumo 1
LONGITUD = LONGITUD - 1 # combinaciones para uno menos
except KeyboardInterrupt:
sys.stderr.write("Interrumpido por el usuario\n")
fin = True # Fuerzo las condiciones de salida
LONGITUD = 0
if VERBOSE == True:
sys.stderr.write("Terminado al "+str(progreso)+"% - Realizadas "+str(cont)+" combinaciones de "+str(variacionesConRepeticion)+"\n")