Python 多线程我的简单SSH暴力执行器

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

我已经编写了一个简单的SSH BruteForce,我正在尝试使它成为多线程的,因为它目前运行速度非常慢。正如您在最后几行中看到的,我已经尝试过了,但并不完全理解线程。我已经读了一些例子,但我不完全理解它,所以我觉得加入到我的程序中会让我更好地理解它

代码:

错误:

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