Python telnetlib read_until spams我的服务器

时间:2014-04-09 14:55:26

标签: python telnet telnetlib

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

我的代码如下:

 s = telnetlib.Telnet(self.host, self.port)
 while 1:
     line = s.read_until("\n")
     print(line)
到目前为止这个工作正常,但是当我查看网络流量时,我可以在客户端和服务器之间看到大量的数据包。如果我使用原始套接字,则不会发生这种情况。

网络上的数据包几乎是空的。我猜这是下一个charakter的拉动

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

谢谢!

2 个答案:

答案 0 :(得分: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的流量跟踪会很棒

答案 1 :(得分: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)