1

Telnet サーバーから読み取るために telnet lib を使用しています。

私のコードは次のようになります。

s = telnetlib.Telnet(self.host, self.port)
 一方 1:
     行 = s.read_until("\n")
     印刷(行)

これは今のところ問題なく動作していますが、ネットワーク トラフィックを見ると、クライアントとサーバーの間に大量のパケットが表示されます。生のソケットを使用すると、これは発生しません。

ネットワーク上のパケットはほとんど空です。これは次のキャラの引きだと思います

これについて誰か説明がありますか?私は自分の telnet サーバーにスパムを送信したくありませんが、行ごとに取得できるので、read_until メカニズムのアイデアが気に入っています。

ありがとう!

4

2 に答える 2

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 に答える
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 に答える