在Python脚本中Telnet到路由器

时间:2013-02-13 12:37:50

标签: 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 个答案:

答案 0 :(得分:1)

我可以回答这个问题。管理以解决它。

当路由器要求用户输入以查看有关该命令的更多信息时,python脚本正在脱轨。

因此,当我要求“显示版本”时,它会在命令行中发出大量信息,然后请求您点击空格以查看更多信息。

为了解决这个问题,我执行的第一个命令是“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()