我正在尝试强行使用URL。它目前运行非常慢,我想知道如何优化代码。 (这是我喜欢的音乐家进行的CTF挑战,如果您破解URL,则会得到未发行的歌曲。) URL中需要破解的部分是5个字符长,字母和数字,不区分大小写。
到目前为止,我一直在使用itertools,最近我尝试添加流程以使其一次尝试多种组合。添加进程似乎并不能大大加快速度。
import requests
from requests.exceptions import HTTPError
import itertools
from itertools import combinations
from multiprocessing import Pool
from sys import exit
print 'generating codes'
symbols = "abcdefghijklmnopqrstuvwxyz1234567890"
urls = [''.join(i) for i in itertools.product(symbols, repeat = 5)]
print 'codes generated'
def checkurl(url):
print 'trying ' + str(url)
try:
r = requests.get('http://website.com/' + str(url))
r.raise_for_status()
except HTTPError:
pass
else:
print 'the URL is ' + r.url
exit(0)
if __name__ == "__main__":
p = Pool(processes=50)
result = p.map(checkurl, urls)
我没想到它会非常快,也没想到,但是我也没想到它会这么慢。在当前状态下,它每秒最多尝试5次。我愿意切换语言,但是对其他与网络相关的其他语言不是很熟悉。