【发布时间】:2015-11-14 17:08:21
【问题描述】:
问题出在这里,我们的安全老师创建了一个需要身份验证的网站,然后要求输入代码(4 个字符),以便您可以访问文件。他告诉我们用 Python(我们想要的任何库)编写一个可以找到密码的蛮力程序。所以要做到这一点,我想首先制作一个可以在该代码字段上尝试随机组合的程序,只是为了了解每个请求的时间(我正在使用请求库),结果令人失望的是每个请求大约需要 8 秒. 通过一些计算:4^36=13 436 928 个可能的组合,这将使我的程序花费大约 155.52 天。 如果有人可以帮助我加快速度,我真的很感激。 (他告诉我们每秒可以进行大约 1200 次组合)
这是我的代码:
import requests
import time
import random
def gen():
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
pw_length = 4
mypw = ""
for i in range(pw_length):
next_index = random.randrange(len(alphabet))
mypw = mypw + alphabet[next_index]
return mypw
t0 = time.clock()
t1 = time.time()
cookie = {'ig': 'b0b5294376ef12a219147211fc33d7bb'}
for i in range(0,5):
t2 = time.clock()
t3 = time.time()
values = {'RECALL':gen()}
r = requests.post('http://www.example.com/verif.php', stream=True, cookies=cookie, data=values)
print("##################################")
print("cpu time for req ",i,":", time.clock()-t2)
print("wall time for req ",i,":", time.time()-t3)
print("##################################")
print("##################################")
print("Total cpu time:", time.clock()-t0)
print("Total wall time:", time.time()-t1)
谢谢
【问题讨论】:
-
当您使用
Session()object 从而让requests重新使用TCP 连接时会发生什么? -
并且不要使用随机密码;使用
itertools.product(alphabet, repeat=4)生成所有组合(使用''.join(combo)将4 个字符重新连接成一个字符串)。 -
谢谢,我会修改那个密码生成方法。你能再解释一下这个会议的想法吗?
-
当我使用 Session() 对象时,请求大约需要 3 秒,这仍然太多了
标签: python python-requests brute-force