4

私はArduinoで小さなTelnetクライアントを書いています。次のコードで非アクティブ化した後、Telnet クライアントのラインモードを再アクティブ化するにはどうすればよいですか?

  client.write(255); // IAC
  client.write(251); // WILL
  client.write(1);   // ECHO

  client.write(255); // IAC
  client.write(251); // WILL
  client.write(3);   // suppress go ahead

  client.write(255); // IAC
  client.write(252); // WONT
  client.write(34);  // LINEMODE

パスワード入力用。

逆のコマンドを試しましたが、うまくいきません。

4

1 に答える 1

1

BSD telnet クライアントを使用して、次のコマンドを使用します。

set debug
set prettydump
set options
set netdata

次に、コマンドを使用して、文字単位モードと行単位モードを切り替えることができます。

mode line
mode character

その後のネゴシエーションは、検査して複製することができます。

ただし、IAC DONT ECHO、パスワード、CR NUL、次に IAC DO ECHO のみを送信するだけで十分です。「WILL ECHO, WILL SGA」を使用して「文字単位」モードに入ることを「kludge モード」と呼びます。ECHO を再度有効にすると、デフォルトで標準の NVT 動作 (ラインモード) になります。

ただし、拡張ラインモードを完全にサポートする bsd クライアント。コードベース (forwardmask、slc、コールバックなど) のほぼ 50% であり、些細なことではありません。

サーバーが WONT LINEMODE と応答した場合、実際にはまだデフォルトの NVT ラインモードのままです。単に拡張ラインモードではないか、ネゴシエートする必要がありません。そのため、DO LINEMODE を送信することは、実際にはひどい考えです。後の rfc からラインモードのサブネゴシエーション プロトコルを確認する必要があるからです。

DO LINEMODE に応答するサーバーは、IAC SB LINEMODE MODE <1 バイト ビットマスク> や IAC SB LINEMODE FORWARDMASK などのラインモード サブネゴシエーションを要求し続ける可能性があります。WONT FORWARDMASK でこの応答を拒否します。MODE には ACK ビットを設定し、同様に応答する必要があります。

于 2013-05-18T01:27:47.910 に答える