问题描述
我正在 python 上创建一个蛮力脚本(用于我的研究),它连接到我的 login.PHP 表单并尝试组合字母表中的每个字符来查找密码。
问题是,在组合了 110 000 次之后,我遇到了内存错误。
我已经在网上查找了似乎是的解决方案:
--> gc.collect() & del var
我尝试在我的函数 bruteforce 的空白字段上添加 gc.collect() 所以每次我 % 100 == 0 时,我都会清除内存空间,但它不起作用。
我认为问题是我的函数运行时无法清除内存空间。也许我应该玩很多线程,例如:
开始 1 停止 1 干净的空间 开始 2 停止 2 干净的空间 等等...
大家有什么建议吗?
这是我的代码:
import itertools,mechanize,threading,gc,os,psutil
charset='abcdefghijklmnopqrstuvwxyz'
br=mechanize.browser()
combi=itertools.combinations(charset,2)
br.open('http://192.168.10.105/login.PHP')
def check_memory():
process = psutil.Process(os.getpid())
mem_info = process.memory_info()
return mem_info.RSS
def bruteforce():
i = 0
for x in combi:
br.select_form(nr=0)
br.form ['username'] = 'myusername'
tried = br.form ['password'] = ''.join(x)
i = i+1
print "Checking : ",tried," Number of try : ",i
response=br.submit()
if response.geturl()=="http://192.168.10.105/index.PHP":
print("The password is : ",''.join(x))
break
if i % 100 == 0:
mem_before = check_memory():
print "Memory before : ",mem_before
print "Free memory "
mem_after = check_memory()
print "Memory after : ",mem_after
x = threading.Thread(target = bruteforce)
x.start()
谢谢!
解决方法
感谢@chepner,我发现问题出在 mechanize 上,而不是 itertools 上。
修复它的一个好方法是清除历史记录:"Out of Memory" error with mechanize