Python 多线程我的简单SSH暴力执行器
我已经编写了一个简单的SSH BruteForce,我正在尝试使它成为多线程的,因为它目前运行速度非常慢。正如您在最后几行中看到的,我已经尝试过了,但并不完全理解线程。我已经读了一些例子,但我不完全理解它,所以我觉得加入到我的程序中会让我更好地理解它 代码: 错误:Python 多线程我的简单SSH暴力执行器,python,multithreading,ssh,brute-force,Python,Multithreading,Ssh,Brute Force,我已经编写了一个简单的SSH BruteForce,我正在尝试使它成为多线程的,因为它目前运行速度非常慢。正如您在最后几行中看到的,我已经尝试过了,但并不完全理解线程。我已经读了一些例子,但我不完全理解它,所以我觉得加入到我的程序中会让我更好地理解它 代码: 错误: Exception in thread Thread-1: Traceback (most recent call last): File "C:\Python27\lib\threading.py", line 810, in
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner
self.run()
File "C:\Python27\lib\threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "C:\Python33\Stuff I made\SSH_Bruter4.py", line 65, in check
ip, password = ip_password
TypeError: iteration over non-sequence
Traceback (most recent call last):
File "C:\Python33\Stuff I made\SSH_Bruter4.py", line 107, in <module>
main()
File "C:\Python33\Stuff I made\SSH_Bruter4.py", line 99, in main
args = ((ip, password) for password in generate_passwords() for ip in txt4)
TypeError: 'NoneType' object is not iterable
线程1中的异常:
回溯(最近一次呼叫最后一次):
文件“C:\Python27\lib\threading.py”,第810行,在引导程序内部
self.run()
文件“C:\Python27\lib\threading.py”,第763行,正在运行
自我目标(*自我参数,**自我参数)
文件“C:\Python33\Stuff I make\SSH\u Bruter4.py”,第65行,检查
ip,password=ip\u密码
TypeError:非序列上的迭代
回溯(最近一次呼叫最后一次):
文件“C:\Python33\Stuff I make\SSH\u Bruter4.py”,第107行,在
main()
文件“C:\Python33\Stuff I make\SSH\u Bruter4.py”,第99行,在main中
args=((ip,密码)用于txt4中ip的生成_passwords()中的密码)
TypeError:“非类型”对象不可编辑
这个问题是令人尴尬的平行问题。您可以针对不同的IP和密码同时运行ssh连接尝试:
#!/usr/bin/env python
# remove .dummy to use processes instead of threads
from multiprocessing.dummy import Pool
def check(params):
ip, username, password = params
# emulate ssh login attempt #XXX put your ssh connect code here
import random
successful = random.random() < .0001
return successful, params
def main():
creds = {}
ips = ["168.1.2.%d" % i for i in range(256)] #XXX dummy ip list, use yours
usernames = ["nobody", "root"] #XXX dummy user list, use yours
def generate_args():
for ip in ips:
for username in usernames:
for password in generate_passwords():
if (ip, username) in creds:
break
yield ip, username, password
pool = Pool(processes=20)
for success, params in pool.imap_unordered(check, generate_args()):
if not success:
continue
print("Found: %r" % (params,))
ip, username, password = params
creds[ip, username] = password
pool.close() # no more tasks
pool.join() # wait for all tasks in the pool to complete
if __name__=="__main__":
main()
关于错误
您的代码已found.put((用户名、密码、ip地址))
(一个包含3个值的元组),但print\u results()
函数需要ip,password=found.get()
(2个值)。错误“太多值无法解包”是因为3
大于2
'NoneType' object is not iterable
trunt()
函数不返回任何内容(None
),但您将其放置在必须生成密码的generate_passwords()
位置(请参见上面的示例实现)。您能告诉我们这纯粹是出于道德目的吗?这仅用于教育目的,这是为了学习paramiko模块而制作的。@Alex,即使没有,也有更精细的工具来完成这项工作。完全无害。使用你的代码,我对我的代码进行了一些编辑,虽然有点不对劲,但速度仍然是6-7秒,我在第45行得到了太多的值来解包错误,并且在第45行“NoneType”对象是不可接受的错误92@Coder77:您的代码不正确,例如,生成密码()
必须生成密码(字符串),它不应该进行任何ssh连接(您应该在check()
函数中进行连接)@Coder77:我已经在答案中添加了示例generate\u password()
实现。@Coder77:我已经添加了错误的解释。让我们来看看
def generate_passwords(pass_file):
return (line.strip() for line in open(pass_file))
ValueError: too many values to unpack
'NoneType' object is not iterable