输入两个登录密码的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 成功登录(password1password2)?

【问题讨论】:

【参考方案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脚本?的主要内容,如果未能解决你的问题,请参考以下文章

用python 脚本控制telnet登录交换机

python批量ssh/telnet远程登录设备

Telnet 使用用户名和密码登录到邮件服务器

无法使用nodejs在telnet登录中输入密码

Python网络编程7-对Telnet流量进行解码分析与拦截

h3c s5120 配好telnet 登录时输入密码就遗失对主机的连接 求破解之法 谢谢