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

时间:2011-04-03 07:52:46

标签: python timeout buffer telnetlib

我使用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

我之前在思科和北电方面遇到过这个问题,但我可以通过思科的“终端长度0”命令和北电的类似命令来克服它。我试图在Juniper上使用等效命令(设置cli屏幕长度),但我仍然得到相同的错误。我需要知道这个错误的含义是什么,它的原因是什么,以及如何克服它。

最诚挚的问候,

4 个答案:

答案 0 :(得分:0)

错误消息

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

非常明显。

您的连接因任何原因而超时。

其中一些防火墙或网络组件在一段时间后由于不活动而关闭连接,或者远程服务在合理的时间内没有响应。

答案 1 :(得分:0)

我遇到了同样的问题。

更改“TNT.read_all()”的命令 - &gt; “TNT.read_some()” 和脚本重试。

答案 2 :(得分:0)

tn.read_very_eager()

对我来说非常好。请记住,我们需要在此之前提供足够的睡眠时间,以便在阅读之前记录它

答案 3 :(得分:0)

尝试完全从终端退出,退出脚本后出现类似问题,错误消息。问题是,我正在启用模式,而不是从终端退出。一旦我添加Exit作为退出telnet脚本的最后一个命令,它就起作用了。 输入ctr+c

后,这是我得到的错误
^CTraceback (most recent call last):
  File "./python_ex1_telnet_reading_file_1.py", line 44, in <module>
    tn.write(b"exit\n")
  File "/usr/lib/python3.8/telnetlib.py", line 335, in read_all
    self.fill_rawq()
  File "/usr/lib/python3.8/telnetlib.py", line 526, in fill_rawq
    buf = self.sock.recv(50)

从脚本中删除:

tn.write(b"end\n")
tn.write(b"exit\n") -- This was missing
print(tn.read_all().decode('ascii'))