telnetlib 和 "buf = self.sock.recv(50)" 错误

0 投票
4 回答
5089 浏览
提问于 2025-04-16 14:58

我正在使用telnetlib来写一个简单的telnet脚本,用于连接Juniper交换机。下面是我的代码:

import telnetlib

HOST = raw_input("Enter host IP address: ")  
USER = raw_input("Enter Username: ")  
PWD = raw_input("Enter Password: ")  
TNT = telnetlib.Telnet(HOST, 23, 10)  
TNT.read_until("login:")  
TNT.write(USER.encode('ascii') + "\n")  
TNT.read_until("Password:")  
TNT.write(PWD.encode('ascii') + "\n")  
TNT.write("set cli screen-length 10000\nconfigure\nshow\nexit\n")  
print (TNT.read_all().decode('ascii'))  
TNT.close()  
raw_input ("Press any Key to Quit: ")  

每次我用这个程序连接Juniper交换机时,都会出现这个错误:

Traceback (most recent call last):  
  File "D:\Python\AuTel Project\Old versions and tials\Telnet (Python 2.7) V1.4.py", line 17, in <module>  
    print (TNT.read_all().decode('ascii'))  
  File "C:\Python27\lib\telnetlib.py", line 325, in read_all  
    self.fill_rawq()  
  File "C:\Python27\lib\telnetlib.py", line 516, in fill_rawq  
    buf = self.sock.recv(50)  
timeout: timed out

我之前在使用Cisco和Nortel时也遇到过这个问题,但我通过在Cisco上使用“terminal length 0”命令和在Nortel上使用类似的命令解决了这个问题。我尝试在Juniper上使用等效的命令(set cli screen-length),但仍然出现同样的错误。我想知道这个错误是什么意思,是什么原因导致的,以及如何解决它。

最好的祝福,

4 个回答

0

这个方法对我来说效果很好。

tn.read_very_eager()

记得,在这之前我们需要留出足够的时间,让它可以先记录下来,然后再进行读取。

0

我也遇到过同样的问题。

你可以把命令从 "TNT.read_all()" 改成 "TNT.read_some()",然后再试试这个脚本。

0

这个错误信息

buf = self.sock.recv(50)
timeout: timed out

看起来很明显。

你的连接超时了,原因可能有很多。

可能是中间的某个防火墙或者网络设备因为一段时间没有活动而关闭了连接,或者是远程服务在合理的时间内没有回应。

撰写回答