You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

暴力破解场景内存管理:Python登录爆破脚本内存溢出卡顿问题求助

内存耗尽的核心原因

你脚本卡顿的根本原因不是没有手动清理内存,是你把itertools.permutations返回的惰性迭代器强制转成了列表:

for i in list(perm):

permutations本身不会一次性生成所有排列组合,只会在遍历的时候逐一生成元素,转成列表会把所有排列结果全部加载到内存,只要你的字典稍大,比如有1万条单词,2元素排列就有1亿条结果,直接占满内存导致卡顿。

优化方案

不需要额外写条件语句手动清理内存,Python自带的引用计数机制会自动回收没有被引用的变量内存,只要做以下修改即可:

  • 直接遍历perm迭代器,不要转成列表,每次只加载一个排列组合到内存
  • 匹配到目标用户名后直接终止所有循环,避免无效计算
  • 删掉冗余的嵌套循环,原代码里对排列后的二元组做了两次重复遍历,完全没有必要
  • 如果确实需要强制回收内存,可以在每次排列遍历结束后调用gc.collect(),但绝大多数场景下不需要额外处理
修正后的代码
import sys
from itertools import permutations
import requests as req
# 只有需要强制GC的时候才导入
# import gc

symbols = '''0123456789_;.:=!@#$^*-'''
symbols = list(symbols)
# 注意原symbols里多写了一个0,已经删掉

crack = "User_name"
found = None

with open(sys.argv[1], encoding='utf-8') as wordlist:
    # 逐行读取避免大字典一次性加载,也可以直接用生成器表达式
    words = (line.strip() for line in wordlist)
    perm = permutations(words, 2)

# 直接遍历迭代器,不要转list
for a, b in perm:
    for j in symbols:
        # 每次只生成两个需要验证的字符串,用完自动回收
        attempt1 = a + j + b
        attempt2 = a + b + j
        # 这里替换成你实际的登录验证逻辑
        if attempt1 == crack or attempt2 == crack:
            found = attempt1 if attempt1 == crack else attempt2
            # 匹配到直接跳出所有循环
            break
    if found:
        break
    # 强制GC的话可以在这里加,非必要
    # gc.collect()

if found:
    print(f"匹配到目标用户名: {found}")
else:
    print("字典内未匹配到目标用户名")
额外注意事项

暴力破解属于未授权访问行为,仅可在你拥有合法授权的目标上使用,避免违反法律法规。


内容的提问来源于stack exchange,提问作者Chinese Billi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 18:36:06