Дамп памяти с использованием Python

У меня есть небольшая программа, написанная для меня на Python, чтобы помочь мне сгенерировать все комбинации паролей из разных наборов цифр и слов, которые я знаю, чтобы восстановить пароль, который я забыл, так как я знаю все разные слова и наборы цифр, которые я использовал, я просто хотел генерировать все возможные комбинации, единственная проблема в том, что список, кажется, продолжается часами и часами, так что в итоге у меня заканчивается память, и она не заканчивается.

Мне сказали, что нужно сбросить память, чтобы она могла продолжаться, но я не уверен, правильно ли это. Есть ли способ обойти эту проблему?

это программа, которую я запускаю:

#!/usr/bin/python
import itertools
gfname = "name"
tendig = "1234567890"
sixteendig = "1111111111111111"
housenum = "99"
Characterset1 = "&&&&"
Characterset2 = "££££"
daughternam = "dname"
daughtyear = "1900"
phonenum1 = "055522233"
phonenum2 = "3333333"





mylist = [gfname, tendig, sixteendig, housenum, Characterset1,
          Characterset2, daughternam, daughtyear, phonenum1, phonenum2]
for length in range(1, len(mylist)+1):
    for item in itertools.permutations(mylist, length):
            print "".join(item)

Я вынул несколько комплектов и изменил цифры и слова по понятным причинам, но это примерно программа.

Другое дело, что я могу пропустить определенное слово, но не хочу помещать его в список, потому что я знаю, что оно может идти раньше всех сгенерированных паролей, кто-нибудь знает, как добавить префикс в мою программу.

извините за плохую грамматику и спасибо за любую помощь, оказанную.

4 ответа

Я использовал guppy Чтобы понять использование памяти, я немного изменил код OP (помеченный #!!!)

import itertools
gfname = "name"
tendig = "1234567890"
sixteendig = "1111111111111111"
housenum = "99"
Characterset1 = "&&&&"
Characterset2 = u"££££"
daughternam = "dname"
daughtyear = "1900"
phonenum1 = "055522233"
phonenum2 = "3333333"

from guppy import hpy # !!!
h=hpy()               # !!!
mylist = [gfname, tendig, sixteendig, housenum, Characterset1,
          Characterset2, daughternam, daughtyear, phonenum1, phonenum2]
for length in range(1, len(mylist)+1):
    print h.heap() #!!!
    for item in itertools.permutations(mylist, length):
            print item # !!!

Гуппи выводит что-то подобное каждый раз h.heap() называется.

Partition of a set of 25914 objects. Total size = 3370200 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  11748  45   985544  29    985544  29 str
     1   5858  23   472376  14   1457920  43 tuple
     2    323   1   253640   8   1711560  51 dict (no owner)
     3     67   0   213064   6   1924624  57 dict of module
     4    199   1   210856   6   2135480  63 dict of type
     5   1630   6   208640   6   2344120  70 types.CodeType
     6   1593   6   191160   6   2535280  75 function
     7    199   1   177008   5   2712288  80 type
     8    124   0   135328   4   2847616  84 dict of class
     9   1045   4    83600   2   2931216  87 __builtin__.wrapper_descriptor

Бег python code.py > code.log и fgrep Partition code.log показывает.

Partition of a set of 25914 objects. Total size = 3370200 bytes.
Partition of a set of 25924 objects. Total size = 3355832 bytes.
Partition of a set of 25924 objects. Total size = 3355728 bytes.
Partition of a set of 25924 objects. Total size = 3372568 bytes.
Partition of a set of 25924 objects. Total size = 3372736 bytes.
Partition of a set of 25924 objects. Total size = 3355752 bytes.
Partition of a set of 25924 objects. Total size = 3372592 bytes.
Partition of a set of 25924 objects. Total size = 3372760 bytes.
Partition of a set of 25924 objects. Total size = 3355776 bytes.
Partition of a set of 25924 objects. Total size = 3372616 bytes.

Как я полагаю, это показывает, что объем памяти остается достаточно постоянным.

Конечно, я могу неверно истолковать результаты guppy, Хотя во время моих тестов я сознательно добавил новую строку в список, чтобы увидеть, увеличилось ли количество объектов, и это произошло.

Для интересующихся мне пришлось установить гуппи как на OSX - Mountain Lionpip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy

Итак, я не думаю, что это проблема нехватки памяти, хотя мы не используем полный набор данных OP.

Чтобы ответить на комментарий выше @shaun, если вы хотите, чтобы файл выводился в блокнот, просто запустите ваш файл так

Myfile.py >output.txt

Если текстовый файл не существует, он будет создан.

РЕДАКТИРОВАТЬ:

Замените строку в вашем коде внизу, которая гласит:

print "" .join(item)

с этим:

with open ("output.txt","a") as f:
    f.write('\n'.join(items))
f.close

который создаст файл с именем output.txt. Должен работать (не проверял)

Как насчет использования IronPython и Visual Studio для его инструментов отладки (которые довольно хороши)? Вы должны быть в состоянии приостановить выполнение и посмотреть на память (по сути, дамп памяти).

Ваша программа будет работать довольно эффективно сама, как вы теперь знаете. Но убедитесь, что вы не просто запустите его в IDLE, например; это замедлит его до сканирования, поскольку IDLE обновляет экран все большим количеством строк. Сохраните вывод непосредственно в файл.

Еще лучше: вы думали о том, что вы будете делать, когда у вас есть пароли? Если вы можете войти в утерянную учетную запись из командной строки, попробуйте сделать это немедленно, вместо того, чтобы хранить все пароли для дальнейшего использования:

for length in range(1, len(mylist)+1):
    for item in itertools.permutations(mylist, length):
        password = "".join(item)
        try_to_logon(command, password)
Другие вопросы по тегам