使用Python打开CMD,并自动输入密码使用Python打开CMD,并自动输入密码(Using p

2019-05-12 11:25发布

我已经成功地得到由蟒蛇被打开CMD。 但是,使用运行方式管理员执行CMD.EXE前带有一个密码检查。

我使用这个打开CMD ...

import subprocess

subprocess.call(["runas", "/user:Administrator", "cmd.exe"])

我正在寻找一种方式来自动输入密码进入,当我运行代码打开runas.exe提示。 说,如果我要创建var = "test"之后添加它import subprocess如何将我让这个这个变量被传递到视为输入runas.exe?

该解决方案将只需要Python模块,其在3.4或更高版本。


更新

我发现这似乎输入直入runas.exe一些代码。 然而,明显的输入\x00\r\n当代码输入应该是test我相当肯定,如果我能得到的输入是test则代码一定会成功。

代码如下:

import subprocess

args = ['runas', '/user:Administrator', 'cmd.exe']

proc = subprocess.Popen(args, 
                        stdin=subprocess.PIPE, 
                        stdout=subprocess.PIPE, 
                        stderr=subprocess.PIPE)

proc.stdin.write(b'test\n')
proc.stdin.flush()

stdout, stderr = proc.communicate()
print (stdout)
print (stderr)

Answer 1:

虽然不回答你的问题,这可能是你的问题的解决方案。 使用PSEXEC而不是运行方式。 你可以像这样运行:

psexec -u user -p password cmd

(或使用在Python运行subprocess.Popen或别的东西)



Answer 2:

这段代码实际工作(在Windows 2008服务器上测试)。 我用它来调用runas为不同的用户,并通过他的密码。 一个新的命令提示符下使用新的用户上下文中打开,而无需输入密码。

请注意,您必须安装pywin32有机会获得在Win32 API。

我们的想法是:

  • Popenrunas命令,而没有任何输入重定向,重定向输出
  • 阅读炭炭,直到我们遇到的“:”(密码提示的最后一个字符)。
  • 发送键事件使用控制台win32包,最后\r结束密码输入。

(改编自该代码 ):

import win32console, win32con, time
import subprocess

username = "me"
domain = "my_domain"
password ="xxx"

free_console=True
try:
    win32console.AllocConsole()
except win32console.error as exc:
    if exc.winerror!=5:
        raise
    ## only free console if one was created successfully
    free_console=False

stdin=win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)

p = subprocess.Popen(["runas",r"/user:{}\{}".format(domain,username),"cmd.exe"],stdout=subprocess.PIPE)
while True:
    if p.stdout.read(1)==":":
        for c in "{}\r".format(password):  # end by CR to send "RETURN"
            ## write some records to the input queue
            x=win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
            x.Char=unicode(c)
            x.KeyDown=True
            x.RepeatCount=1
            x.VirtualKeyCode=0x0
            x.ControlKeyState=win32con.SHIFT_PRESSED
            stdin.WriteConsoleInput([x])

        p.wait()
        break


Answer 3:

我试图做同样的队友ExoticScarf。 复制代码`

args=(["runas.exe", "/user:admin", "program.exe"])
proc = subprocess.Popen(args, 
                        stdin=subprocess.PIPE, 
                        stdout=subprocess.PIPE, 
                        stderr=subprocess.PIPE,
                        universal_newlines=True)
passw='password'
proc.stdin.write(passw)
proc.stdin.flush()

stdout, stderr = proc.communicate()
print (stdout)
print (stderr)`

添加universal_newlines =真它似乎罐写像一个海峡通不喜欢像字节的对象..



文章来源: Using python to open cmd and automatically enter a password