Python在循环中循环

时间:2014-03-09 18:44:12

标签: python

我希望迭代一系列服务器,用户名和密码。

我们的想法是使用用户名密码对,并尝试使用服务器列表中的服务器。看起来很简单,但是我无法弄清楚如何浏览服务器列表和用户通过列表。

也许创建一个包含用户名的文件并传递给每个服务器(每行1个服务器)?

以下是我到目前为止所获得的代码。从一个文件中捕获用户+密码列表。从另一个获取服务器列表。将用户名传递对拆分为字典。将服务器粘贴在一个列表中,删除\ n(换行符)。

我尝试遍历def keycmd函数中的每一个,但正如您所看到的,它只需要第一个用户名密码并迭代服务器。

任何想法或帮助都将不胜感激。

示例CLI&输出

c:\Python27>python rdpcheck.py -u userpass.txt -s servers.txt

#This output is based on 1 user in the userlist

CMDKEY: Credential added successfully.
192.168.1.122 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.111 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.112 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.113 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.114 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.115 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.116 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.117 User1 Passw1

CMDKEY: Credential added successfully.
192.168.1.118 User1 Passw1

CODE

#!/usr/bin/python

"""
Description:

Valid user credentials used to test RDP access to list of RDP enabled servers. credentials against a list of servers

Usage:
  rdpcheck.py (-u <FILE>) (-s <FILE>)
  rdpcheck.py -h | --help
  rdpcheck.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.
  -u --user=FILE
  -s --server=FILE
  """
from docopt import docopt
import subprocess

def getuserpass(userpass):
        nlist = {}
        with open(userpass, 'r') as f:
                for line in f:
                        k = line.split()
                        nlist[k[0]] = k[1]
        return nlist

def getservers(servers):
        slist = open(servers).readlines()
        return [s.replace('\n', '') for s in slist]

def rdpcall(userpass, servers):
        print "This is doing stuff"
        subprocess.call(['mstsc'])

def keycmd(listuserpass, servers):
        nlist = listuserpass

        for username, password in nlist.iteritems():

                for server in servers:
                        print server, username, password
                        print subprocess.check_output("cmdkey /generic:TERMSERV/%s /user:%s /pass:%s"), server, username, password

if __name__ == "__main__":
        arguments = docopt(__doc__, version='0.1a')

        returned_userlist = getuserpass(arguments['--user'])
        returned_servers = getservers(arguments['--server'])
        print keycmd(returned_userlist, returned_servers)

2 个答案:

答案 0 :(得分:0)

我不明白设置。为什么你有一个用户名,密码对的列表,你不知道他们属于哪个服务器? (对不起句子的逻辑)

话虽这么说,你的代码似乎主要做正确的事情。 (我有一些非功能性的狡辩,但没有什么可以改变代码的行为。)你得到什么输出?你能提供示例输入文件和示例输出吗?

顺便说一句:keycmd不会返回任何内容。你打算打印什么?

答案 1 :(得分:0)

似乎我是个傻瓜,并没有在列表中添加超过1个用户。所以这个帖子的结果只是我的代表下降了2 ^ _ ^。