Fixed rulegen threading bug
This commit is contained in:
parent
774db7004a
commit
5311d5cbb1
14
rulegen.py
14
rulegen.py
@ -26,7 +26,7 @@ import subprocess
|
|||||||
|
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
|
|
||||||
VERSION = "0.0.3"
|
VERSION = "0.0.4"
|
||||||
|
|
||||||
# Testing rules with hashcat --stdout
|
# Testing rules with hashcat --stdout
|
||||||
HASHCAT_PATH = "hashcat/"
|
HASHCAT_PATH = "hashcat/"
|
||||||
@ -35,7 +35,9 @@ HASHCAT_PATH = "hashcat/"
|
|||||||
class RuleGen:
|
class RuleGen:
|
||||||
|
|
||||||
# Initialize Rule Generator class
|
# Initialize Rule Generator class
|
||||||
def __init__(self,language="en",providers="aspell,myspell",basename='analysis',threads=4):
|
def __init__(self,language="en",providers="aspell,myspell",basename='analysis',threads=multiprocessing.cpu_count()):
|
||||||
|
|
||||||
|
self.threads = threads
|
||||||
|
|
||||||
self.enchant_broker = enchant.Broker()
|
self.enchant_broker = enchant.Broker()
|
||||||
self.enchant_broker.set_ordering("*",providers)
|
self.enchant_broker.set_ordering("*",providers)
|
||||||
@ -877,12 +879,12 @@ class RuleGen:
|
|||||||
print "[*] Press Ctrl-C to end execution and generate statistical analysis."
|
print "[*] Press Ctrl-C to end execution and generate statistical analysis."
|
||||||
|
|
||||||
# Setup queues
|
# Setup queues
|
||||||
passwords_queue = multiprocessing.Queue(multiprocessing.cpu_count() * 100)
|
passwords_queue = multiprocessing.Queue(self.threads)
|
||||||
rules_queue = multiprocessing.Queue()
|
rules_queue = multiprocessing.Queue()
|
||||||
words_queue = multiprocessing.Queue()
|
words_queue = multiprocessing.Queue()
|
||||||
|
|
||||||
# Start workers
|
# Start workers
|
||||||
for i in range(multiprocessing.cpu_count()):
|
for i in range(self.threads):
|
||||||
multiprocessing.Process(target=self.password_worker, args=(i, passwords_queue, rules_queue, words_queue)).start()
|
multiprocessing.Process(target=self.password_worker, args=(i, passwords_queue, rules_queue, words_queue)).start()
|
||||||
multiprocessing.Process(target=self.rule_worker, args=(rules_queue, "%s.rule" % self.basename)).start()
|
multiprocessing.Process(target=self.rule_worker, args=(rules_queue, "%s.rule" % self.basename)).start()
|
||||||
multiprocessing.Process(target=self.word_worker, args=(words_queue, "%s.word" % self.basename)).start()
|
multiprocessing.Process(target=self.word_worker, args=(words_queue, "%s.word" % self.basename)).start()
|
||||||
@ -1014,7 +1016,7 @@ if __name__ == "__main__":
|
|||||||
parser.add_option("-b","--basename", help="Output base name. The following files will be generated: basename.words, basename.rules and basename.stats", default="analysis",metavar="rockyou")
|
parser.add_option("-b","--basename", help="Output base name. The following files will be generated: basename.words, basename.rules and basename.stats", default="analysis",metavar="rockyou")
|
||||||
parser.add_option("-w","--wordlist", help="Use a custom wordlist for rule analysis.", metavar="wiki.dict")
|
parser.add_option("-w","--wordlist", help="Use a custom wordlist for rule analysis.", metavar="wiki.dict")
|
||||||
parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False, help="Don't show headers.")
|
parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False, help="Don't show headers.")
|
||||||
parser.add_option("--threads", type="int", default=10, help="Parallel threads to use for processing.")
|
parser.add_option("--threads", type="int", default=multiprocessing.cpu_count(), help="Parallel threads to use for processing.")
|
||||||
|
|
||||||
wordtune = OptionGroup(parser, "Fine tune source word generation:")
|
wordtune = OptionGroup(parser, "Fine tune source word generation:")
|
||||||
wordtune.add_option("--maxworddist", help="Maximum word edit distance (Levenshtein)", type="int", default=10, metavar="10")
|
wordtune.add_option("--maxworddist", help="Maximum word edit distance (Levenshtein)", type="int", default=10, metavar="10")
|
||||||
@ -1082,8 +1084,6 @@ if __name__ == "__main__":
|
|||||||
print "[*] Using Enchant '%s' module. For best results please install" % rulegen.enchant.provider.name
|
print "[*] Using Enchant '%s' module. For best results please install" % rulegen.enchant.provider.name
|
||||||
print " '%s' module language dictionaries." % rulegen.enchant.provider.name
|
print " '%s' module language dictionaries." % rulegen.enchant.provider.name
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Analyze a single password or several passwords in a file
|
# Analyze a single password or several passwords in a file
|
||||||
if options.password:
|
if options.password:
|
||||||
rulegen.analyze_password(args[0])
|
rulegen.analyze_password(args[0])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user