22

Pythonスクリプトを介してサーバーにコマンドを送信しようとしています。サーバー上でソケット接続が確立されていることがわかります。しかし、私が送信しているコマンドは、それを通過していないようです(サーバーはソケットで読み取りを行います)。サーバーは現在、telnet コマンド インタープリターをサポートしています。つまり、コマンド アドレスとポートに telnet で接続すると、文字列コマンドの送信を開始できます。私の質問は、telnet を使用するのではなく、tcp ソケットを介して文字列を送信することと根本的に異なる点はありますか? raw ソケットと Twisted フレームワークの両方を使用しました。

4

3 に答える 3

23

Telnet は、通信チャネルに関する制御情報を渡す方法です。これは、ラインバッファリング、文字エコーなどを定義し、接続の開始時 (およびまれにセッション中) に一連の will/wont/do/dont メッセージを介して実行されます。

それはおそらく、サーバーのドキュメントが意味するものではありません。代わりに、おそらく「Telnet」などのプログラムを使用してポートへの TCP ソケットを開き、サーバー上のコマンド インタープリターと対話できることを意味します。

Telnet プログラムが接続すると、通常はこれらの制御メッセージをリッスンしてから応答するため、実際には telnet プロトコルを使用しない TCP/ソケット接続で動作し、単純な raw パイプに戻ります。サーバーは、すべての文字エコー、行バッファリングなどを行う必要があります。

したがって、あなたの場合、サーバーは telnet エスケープ シーケンスのない生の TCP ストリームを使用している可能性が高いため、違いはありません。

于 2012-10-04T15:31:37.053 に答える
4

telnetのウィキペディアのページから

...ユーザー データは、Telnet 制御情報とともに帯域内に散在しています...

したがって、あなたの質問に答えるために、はい、telnet は raw ソケットとは異なります。

RFC 854は、telnet プロトコルを実装してみたい場合、または既存の python クライアントを使用したい場合はtelnetlibを使用する場合に、telnet プロトコルについて説明しています。

于 2012-10-04T15:12:30.663 に答える