我正在尝试使用python执行登录脚本,该脚本将尝试使用shell命令login -q MyUsername
登录并尝试多个密码。我已经可以生成所需的密码但是当我尝试使用下面的代码登录时,login
命令响应我输入了错误的用户名,尽管我知道我正确地写了它。澄清一下:当我已经知道用户名而不是密码时,我正在创建一个使用shell命令login
登录的脚本。下面的代码显示了我正在做的事情(迭代密码)。
for password in passwordList:
p = Popen(["login","-q","MyUsername"], stdin=PIPE, stdout=PIPE) #The username MyUsername is correct, 100% sure
print repr(p)
stdout_value = p.communicate(password)[0] #
print(str(stdout_value))
if repr(stdout_value).startswith('Login incorrect\nlogin: '):
print "ERROR"
else:
print "GOOD"
break
如果我直接在终端输入命令login -q MyUsername
,系统会提示我输入密码,而使用该脚本会返回“登录不正确”。我也对Popen
如何工作以及如何写入stdout
感到困惑。
提前致谢!
(其他问题:有更简单的方法吗?(尝试使用多个密码登录)我正在使用login
,因为它没有锁定,如果是,则无法访问用户数据不是超级用户)。
答案 0 :(得分:1)
login
可能read/write directly from/to terminal (tty)在流程之外'}标准输入/输出。您可以使用pexpect
,在其文档Q: Why not just use a pipe (popen())?中阅读第一个原因:
import pexpect
output, rc = pexpect.run("login -q MyUsername",
events={"(?i)password: ": "password"},
withexitstatus=True)
有更简单的方法吗?
从/ etc / passwd,/ etc / shadow和check those using crypt.crypt()
中读取哈希值。或者使用专门的工具来测试弱密码,例如"John the Reaper"。