【问题标题】:Python telnetlib read_until spams my serverPython telnetlib read_until 向我的服务器发送垃圾邮件
【发布时间】:2014-04-14 18:11:39
【问题描述】:

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

我的代码如下所示:

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

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

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

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

谢谢!

【问题讨论】:

    标签: python telnet telnetlib


    【解决方案1】:

    您的 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 的流量跟踪

    【讨论】:

    • 通过使用解决它:
       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) 
    【解决方案2】:

    通过使用解决它:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多