由于是弱密码扫描,字典肯定不小,那么为了追求速度,肯定要使用线程,patator默认使用10个线程去跑,这部分代码主要在控制部分中(class Controller),代码还是有点小复杂的。

  gqueues = [Queue(maxsize=10000) for _ in range(self.num_threads)]

    # consumers
    for num in range(self.num_threads):
      pqueue = Queue(maxsize=1000)
      t = Thread(target=self.consume, args=(gqueues[num], pqueue))
      t.daemon = True
      t.start()
      self.thread_report.append(pqueue)
      self.thread_progress.append(Progress())

    # producer
    t = Thread(target=self.produce, args=(gqueues,))
    t.daemon = True
    t.start()

  正如你所看到的,启用了两个经典的线程,一个produce,一个consume,两者通信使用的是Queue。self.num_threads是可配的,通过命名行中指定 -t,否则将是默认的10个线程。

  到这里要和大家说再见了,Patator源码还是值得一读的,剩下的交给你们自己行动了。