Вот кусочек: Code: цикл... цикл... цикл... f = urllib2.urlopen(request) text = f.read().decode('utf8') login = re.findall('admin-ajax.php', text) if len(login) != 0: hello.write(suite+";"+user+";"+password); и проблема в том, что hello.write выполнится тогда, когда прогонятся все 3 цикла. и даже если у меня ан первом шаге правильный логин и пасс, в файл он запишется когда закончатся все 3 цикла
Ахха, это python! Приведи остальной код нечего не понятно, Можно грубо поступить при нахождении гуда возбудить искл., и отловить его в нужном месте.
ахахах 100 пудова, ошибся чуток. Весь код не приведу) Но вот его суть Code: for xxx1 in xxx2 xxx1 = xxx1.strip() for yyy1 in yyy2 yyy1 = yyy1.strip() for zzz1 in zzz2 zzz2 = zzz1.strip() ....... f = urllib2.urlopen(request) text = f.read().decode('utf8') login = re.findall('admin-ajax.php', text) if len(login) != 0: hello.write(suite+";"+user+";"+password); И вот пока xxx1, yyy1 и zzz1 не проматаются - то hello.write не выполнится - а хотя должно на каждом шаге записывать
После hello.write... напиши hello.flush() и будет тебе счастье Все дело в том, что питон не пишет на прямую на диск, а сначала в буфер. flush() записывает этот бужер на диск, так же как и close(), но при этом не закрывает файл.
угу, только без кода и структуры циклов невозможно понять что и как рвать. Совет ТС: первый цикл -- перебор админок(думаю так и есть), в нем цикл перебора пассов, а уже в нем цикл перебора логинов. Тогда при гуде просто нужно написать <список пользователей>.remove(login) и break, тогда все будет хорошо, не будет выполняться лишней работы.
создай глобальную переменную/флаг, булевого типа. При нахождении гуда выставляй ее в true; В каждом цикле проверяй ее значение и при true, прерывай работу цикла.
Я питона не знаю, но в других языках ексцепшны для других целей применяються. Как то странно вы советуете их использовать. Почему break не подойдет?
Patronik в брутерах - стандартная ситуация это НЕ найти правильной комбинации и перейти к следующей. И с точки зрения логики нахождение правильной комбинации - это действительно исключительная ситуация. break гарантирует прерывание только одного цикла и сам факт такого прерывания - не отражает того, что комбинация найдена. Так что использование собственного (а не базового) исключения - вполне оправдано.
Ви имеете ввиду нетипичные спобобы использования исключений с целью управления ходом работы программы? То есть мы в коде обработки собственного исключения обрабатываем гуд?
1) Права на файл при открытии указать не "w", а "a" (того файла, который скрывается под хендлером hello). Избавитесь от flush(). Подробнее можете прочитать в документации. 2) Если ваша цель - точечный брут и вам нужно возвратить первый подходящий пароль, то: 1) Вынести ваши вложенные циклы в функцию. 2) После нахождения правильного пароля сделать return.