错误

2017-08-06 11 views
0

最近我开始学习Python和目前正在一个小的脚本来远程Telnet从物理的笔记本电脑一台路由器的GNS。每个连接都很好,我可以通过CMD使用telnet命令远程登录路由器。错误

但是,当我运行我的脚本,而不是说我在哪里面临的问题进行直接telnet命令。程序运行正常,没有任何问题,但telnet不起作用。

我试图路由器上运行的调试以及可有人请从调试命令的脚本代码和输出,并建议这可能是错误的可能。

脚本代码:


import getpass 
import sys 
import telnetlib 
HOST = "192.168.1.7" 

tn =telnetlib.Telnet("192.168.1.7", "23") 
user = input("Enter your username: ") 
password = getpass.getpass() 
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") 

思科DEBUG TELNET命令的输出:


R2# 
*Aug 6 16:50:15.095: Telnet2: 1 1 251 1 
*Aug 6 16:50:15.095: TCP2: Telnet sent WILL ECHO (1) 
*Aug 6 16:50:15.095: Telnet2: 2 2 251 3 
*Aug 6 16:50:15.095: TCP2: Telnet sent WILL SUPPRESS-GA (3) 
*Aug 6 16:50:15.095: Telnet2: 80000 80000 253 24 
*Aug 6 16:50:15.099: TCP2: Telnet sent DO TTY-TYPE (24) 
*Aug 6 16:50:15.099: Telnet2: 10000000 10000000 253 31 
*Aug 6 16:50:15.099: TCP2: Telnet sent DO WINDOW-SIZE (31) 
R2# 
*Aug 6 16:50:23.451: TCP2: Telnet received DONT ECHO (1) 
*Aug 6 16:50:23.451: TCP2: Telnet sent WONT ECHO (1) 
*Aug 6 16:50:23.539: TCP2: Telnet received DONT SUPPRESS-GA (3) 
*Aug 6 16:50:23.539: TCP2: Telnet sent WONT SUPPRESS-GA (3) 
*Aug 6 16:50:23.543: TCP2: Telnet received WONT TTY-TYPE (24) 
*Aug 6 16:50:23.543: TCP2: Telnet sent DONT TTY-TYPE (24) 
*Aug 6 16:50:23.543: TCP2: Telnet received WONT WINDOW-SIZE (31) 
*Aug 6 16:50:23.547: TCP2: Telnet sent DONT WINDOW-SIZE (31) 
*Aug 6 16:50:23.567: TCP2: Telnet received DONT ECHO (1) 
*Aug 6 16:50:23.571: TCP2: Telnet received DONT SUPPRESS-GA (3) 
*Aug 6 16:50:23.571: TCP2: Telnet received WONT TTY-TYPE (24) 
R2# 
*Aug 6 16:50:23.571: TCP2: Telnet received WONT WINDOW-SIZE (31) 
R2# 
+0

您是否收到错误或程序暂停了某处? – VPfB

+0

没有程序不停止,我也没有得到任何错误。 –

+0

什么不起作用?你能否写下:1.你期望什么; 2.正在发生的事情,而不是 – VPfB

回答

0

首先,你需要知道你的程序是停止 - 否则你怎么能知道哪个站客房成功并失败?

出于调试目的,插入print调用(或声明,Python是否2)每个语句后,像

tn =telnetlib.Telnet("192.168.1.7", "23") 
user = input("Enter your username: ") 
password = getpass.getpass() 
print"About to call tn.read") 
tn.read_until(b"Username: ") 
print"About to write username") 
tn.write(user.encode("ASCII") + b"\n") 
if password: 
    print"Looking for password prompt") 
    tn.read_until(b"Password: ") 
    print"About to write password") 
    tn.write (password.encode("ASCII") + b"\n") 

最终的一个想法:在Cisco路由器上我很多年前使用时,用户名提示止跌在您输入换行符之前不会出现 - 所以您可以尝试在第一个tn.read_until调用之前添加tn.write(b'\n')

1

我没有你的Python脚本的其余部分。但是,如果你使用.read_all(),你有没有进一步的命令发出,你必须发送exit命令到路由器 为.read_all()“读取所有数据,直到EOF为字节;块,直到连接关闭。” (​​)。

import getpass 
import telnetlib 
HOST = "192.168.1.7" 

tn =telnetlib.Telnet("192.168.1.7", "23") 
user = input("Enter your username: ") 
password = getpass.getpass() 
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"exit\n") # This line added if you don't have in your script 

print(tn.read_all().decode('ascii')) 

如果您有根据收到的输出进一步的命令,你可以使用:read_until(expected, timeout=1)
读取到一个给定的字节串,预计,当遇到或直到超时秒过去了。