Python telnetlib 客户端似乎没有打开到服务器的 telnet 连接

Posted

技术标签:

【中文标题】Python telnetlib 客户端似乎没有打开到服务器的 telnet 连接【英文标题】:Python telnetlib client doesn't appear to be opening telnet connection to server 【发布时间】:2015-12-31 08:30:04 【问题描述】:

我正在尝试打开一个 telnet 连接,编写一个字符串,然后用 Python 打印来自 telnet 服务器的所有内容。我认为我遗漏了一些明显的东西,因为文档看起来很不言自明,并且在终端中做我认为完全相同的事情可以正常工作。

这是 Python 代码:

import telnetlib

telnet = telnetlib.Telnet()
telnet.open('192.168.1.128', 9801, 10)
telnet.write("SYSTEM_CAL")

print(telnet.read_all())

这在 10 秒后超时/没有成功连接到我假设的服务器。这是输出:

Traceback (most recent call last):
  File "/Volumes/Work/Scripting/Telnet Test/main.py", line 9, in <module>
    print(telnet.read_all())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/telnetlib.py", line 385, in read_all
    self.fill_rawq()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/telnetlib.py", line 576, in fill_rawq
    buf = self.sock.recv(50)
socket.timeout: timed out

在下图中,我连接到终端中的同一台服务器,一切正常。最后,我给出了服务器执行的“DISCONNECT”命令,这就是连接关闭的原因。

我错过了什么吗?为什么这在终端而不是 Python 中工作?

【问题讨论】:

【参考方案1】:

我想你发送命令太早了,而接收端忽略了它。尝试先阅读横幅:

print(telnet.read_until("Welcome."))
telnet.write("SYSTEM_CAL")
print(telnet.read_all())

编辑:

我还注意到,“SYSTEM_CAL”的末尾没有行终止序列。我假设,在交互式会话中,您在键入“SYSTEM_CAL”后按 ↵ ENTER。如果是这种情况,您需要在write() 调用的末尾添加\n

telnet.write("SYSTEM_CAL\n")

根据您的问题之外的其他因素,您可能需要以下之一:

telnet.write("SYSTEM_CAL\r")
telnet.write("SYSTEM_CAL\r\n")

【讨论】:

我在执行此操作时收到欢迎消息,但随后超时。我没有得到 COMMAND: OK 这应该是由编写 SYSTEM_CAL @createer - 我想知道您的 telnet 服务器是否需要行终止符才能处理命令。查看我最近的编辑。

以上是关于Python telnetlib 客户端似乎没有打开到服务器的 telnet 连接的主要内容,如果未能解决你的问题,请参考以下文章

Python3+telnetlib实现telnet客户端

python3+telnetlib实现简单自动测试

python中telnetlib模块的使用

python中telnetlib模块的使用

Python 3 telnetlib 路由器重启

Python telnetlib:令人惊讶的问题