输入两个登录密码的Python telnet脚本?
Posted
技术标签:
【中文标题】输入两个登录密码的Python telnet脚本?【英文标题】:Python telnet script with two login passwords input? 【发布时间】:2021-05-04 06:21:26 【问题描述】:这是我第一次使用python所以请帮助... :)
如果我知道正确的密码,这个 telnet 脚本对我来说很好,但192.168.1.1
上的路由器有时会使用密码:password1
启动,有时会使用密码:password2
,我需要脚本完全自动化,因此密码需要直接从脚本中读取,因为无论密码是第一个还是第二个,我都想远程登录并登录到路由器。
import telnetlib
import time
router = '192.168.1.1'
password = 'password1'
username = 'admin'
tn = telnetlib.Telnet(router)
tn.read_until(b"Login: ")
tn.write(username.encode("ascii") + b"\n")
tn.read_until(b"Password: ")
tn.write(password.encode('ascii') + b"\n")
print("Successfully connected to %s" % router)
tn.write(b"sh ip int bri\n")
time.sleep(2)
print (type("output"))
output = tn.read_very_eager()
#print(output)
output_formatted = output.decode('utf-8')
print(output_formatted)
print("done")`
如果第一个密码不正确,我该如何修改此代码,使其尝试第二个密码,以便在两种情况下都通过 telnet 成功登录(password1
或 password2
)?
【问题讨论】:
【参考方案1】:在写入第一个密码tn.write(password...)
后,您需要确定什么输出对应于正确的登录。例如,这可能是以“ok >”结尾的命令提示符。对于不正确的密码,您需要检测与另一个密码提示对应的输出,例如再次“密码:”,或者从“登录:”重新开始。
然后您可以使用 telnetlib 的 expect()
方法通过将这两个输出放在一个列表中来同时查找它们,例如 ["ok >", "Password: "]
。见pydoc telnetlib
。此方法返回一个元组(列表中的索引,匹配对象,文本读取直到匹配)。唯一感兴趣的项目是第一项,即索引;如果看到“ok >”,则为 0,如果看到“Password:”,则为 1,如果在给定的超时时间内都没有看到,则为 -1。您只需要测试此值并适当地继续。
index, match, text = tn.expect([b"ok >", b"Password: "], timeout=10)
if index==-1:
... # oops, timeout
elif index==1:
... # need to send password2
else:
... # ok, logged in
注意,传递给expect()
的字符串会被编译成正则表达式,因此请注意使用特殊字符(请参阅pydoc re
)。
【讨论】:
以上是关于输入两个登录密码的Python telnet脚本?的主要内容,如果未能解决你的问题,请参考以下文章