1

我正在使用 telnet lib 从 Telnet 服务器读取数据。

我的代码如下所示:

s = telnetlib.Telnet(self.host, self.port)
 而1:
     line = s.read_until("\n")
     打印(行)

到目前为止这工作正常,但是当我查看网络流量时,我可以看到客户端和服务器之间的大量数据包。如果我使用原始套接字,则不会发生这种情况。

网络上的数据包几乎是空的。我猜这是对下一个角色的吸引力

有人对此有解释吗?我不想向我的 telnet 服务器发送垃圾邮件,但我喜欢 read_until 机制的想法,因为我可以逐行获取。

谢谢!

4

2 回答 2

0

通过使用解决它:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((self.host, self.port))
for i in s.makefile('r'):
    print("FOO " + i)
于 2014-04-14T10:11:39.193 回答
0

您的 Telnet 服务器似乎在非缓冲模式下工作(不是发送整行,而是发送单独数据包中的每个符号)。您可能需要更改服务器设置,以便它可以在缓冲模式下工作。

此外,您可能会看到:

  • 大量从 telnet 客户端返回到服务器的数据包。这些是所有命令的回声,很正常
  • 带有新行符号的小数据包,例如\n\n\r

编辑:

另一个可能的原因是轮询,你可以试试这个:

import sys
import select
del select.poll
import telnetlib

tn = telnetlib.Telnet('10.32.137.39', 3008)

while 1:
    line = s.read_until("\n")
    print(line)

说一些更具体的东西,很高兴看到 Wireshark 的流量跟踪

于 2014-04-10T18:04:51.510 回答