我正在编写一个简单的蛮力脚本,并尝试添加多处理程序以使其更快,但是我不知道如何编写callback
函数,该函数将在工作人员中的一个找到密码时终止工作人员。 / p>
我试图制作从bruteforce函数传递到quit函数的全局变量,但没有成功。
我将发布工作程序代码和蛮力部分。可能有点混乱,我只是在尝试一些事情,并且正在使用print语句进行专业的调试。
class Process:
def __init__(self, args):
self.args = args
self.ncpu = multiprocessing.cpu_count()
self.pool = multiprocessing.Pool(processes=self.ncpu)
def quit(self, result):
if result:
self.pool.terminate()
def run(self, args):
split = MultiSplit(self.args)
if not self.args.m:
split.split()
for i in range(1, self.ncpu + 1):
self.pool.apply_async(bruteforce, (args, i), callback=self.quit)
self.pool.close()
self.pool.join()
else:
bruteforce(args, 0)
这里是bruteforce
函数
def bruteforce(args, n):
in_zip = args.input
if not args.m:
wl = "/home/kuskus/Desktop/ZyBR/testing/wordlists/%d.txt" % n
elif n == 0:
wl = args.wordlist
print(pyzipper.AESZipFile(in_zip))
found = False
global password
with pyzipper.AESZipFile(in_zip) as zf:
with open(wl) as wordlist:
for line in wordlist:
password = line.strip('\n')
if not found:
try:
zf.pwd = str.encode(password)
zf.extractall('./')
print("password found: %s" % password)
return
except Exception:
if args.q:
pass
else:
print(password)
我的想法是以某种方式将找到的变量从bruteforce
函数返回到callback
函数,但是我认为这行不通,因为我需要执行4次。