''t work' Python3 Telnet读取全部(read_all())无效

2024-09-25 10:29:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过Python3远程连接到Cisco路由器。但是,它在运行脚本后挂断(但是我可以从linuxbash远程登录到路由器)。请参阅下面我的脚本和输出片段。在

import getpass
import telnetlib
HOST = "10.10.32.3"
user = input("Enter your telnet username: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until(b"Username: ")
tn.write(user.encode('ascii') + b"\n")
if password:
    tn.read_until(b"Password: ")
    tn.write(password.encode('ascii') + b"\n")
tn.write(b"conf t\n")
tn.write(b"int l0\n")
print(tn.read_all().decode('ascii'))

这是路由器上debug telnet的输出

^{pr2}$

以及show tcp brief的输出

Router#sho tcp brief 
TCB       Local Address               Foreign Address             (state)
10C90CE0  10.10.32.3.23              192.168.122.61.51466        ESTAB

我可以创建环回接口,但是我的linuxbash没有显示telnet输出。请据此指导。谢谢您。在


Tags: import脚本hostread远程ascii路由器password
2条回答

在Telnet.read_全部():在EOF之前读取所有数据;阻止直到连接关闭。 因此,您必须使用exit命令来指示它是文件结束。 你的代码应该像

import getpass
import telnetlib
HOST = "10.10.32.3"
user = input("Enter your telnet username: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until(b"Username: ")
tn.write(user.encode('ascii') + b"\n")
if password:
    tn.read_until(b"Password: ")
    tn.write(password.encode('ascii') + b"\n")
tn.write(b"conf t\n")
tn.write(b"int l0\n")
tn.write("end\n")
tn.write("exit\n")
print(tn.read_all().decode('ascii'))

telnetlib中的.read_all()被记录为“在EOF之前读取所有数据;在连接关闭之前阻塞。”。由于您没有做任何会导致连接关闭的操作,因此挂起正是您应该期望在这里发生的事情。尝试先向路由器发送退出命令。或者,如果要根据读取的结果发出进一步的命令,请使用.read_until()(可能指定了超时)。在

相关问题 更多 >