在Python脚本中Telnet连接路由器

0 投票
1 回答
3993 浏览
提问于 2025-04-17 15:44
import getpass
import sys
import telnetlib

tn = telnetlib.Telnet("xxxxxxxx")
tn.write("xxxxxx" + "\n")
tn.write("xxxxxx" + "\n")

tn.write("show version\n")
tn.write("exit\n")

print tn.read_all()

我在尝试用telnet连接一个路由器,但脚本卡住了……我也不知道怎么回事。我试过调试,但输出的内容让我搞不清楚。

telnetlib.py(511):         if self.irawq >= len(self.rawq):
telnetlib.py(512):             self.rawq = ''
telnetlib.py(513):             self.irawq = 0
telnetlib.py(516):         buf = self.sock.recv(50)

这是调试时卡住的地方。

谢谢,
威廉

1 个回答

1

我来回答这个问题。我已经把它解决了。

这个Python脚本在路由器需要用户输入以查看更多命令信息时出现了问题。

比如,当我输入“show version”时,它会在命令行上输出很多信息,然后会提示你按空格键来查看更多内容。

为了解决这个问题,我执行的第一个命令是“term len 0”。这个命令可以停止路由器要求用户输入,而是一次性把所有信息都输出出来。

下面是最终的脚本。改动了不少,但现在可以正常工作了。

import sys
import telnetlib

tn = telnetlib.Telnet("xxxxxxxx")

TELNET_PROMPT="xxxxxxxxxx"
TIMEOUT=1
tn.write("xxxxxxx"+"\n")
tn.write("xxxxxxx"+"\n")
print tn.read_until(TELNET_PROMPT, TIMEOUT)
tn.write("term len 0" + "\n")
print tn.read_until(TELNET_PROMPT, TIMEOUT)
tn.write("show version" + "\n")
print tn.read_until(TELNET_PROMPT, TIMEOUT)
tn.write("exit"+"\n")
tn.close()

撰写回答