在Python脚本中Telnet连接路由器
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()