プロトコルネゴシエーションなしでtelnetコマンドを使用する

プロトコルネゴシエーションなしでtelnetコマンドを使用する

TCP / IPサーバーを介してシリアルポートに接続するためにTelnetを使用しています。フィルタリングされていないバッファリングされていない生の接続が必要で、ほとんどそこに到達できますが、私が何をしても接続すると、Telnetはプロトコルネゴシエーションコマンドを送信します。

「man Telnet」ページに次のように表示されているので、これは奇妙です。

When connecting to ports other than the telnet port, telnet does not attempt telnet
protocol negotiations. This makes it possible to connect to services that do not
support the telnet protocol without making a mess.

ただし、標準以外のポートに接続しても、Telnet は以下を交渉します。

linuxdev:~ griscom$ telnet 172.16.250.49 2023
Trying 172.16.250.49...
Negotiating binary mode with remote host.
Connected to 172.16.250.49.
                           Escape character is '^]'.

そしてマニュアルページで警告したように、これは混乱を引き起こす可能性があります。

完全に透明なTCP / IPクライアントとしてTelnetを使用する方法はありますか?それとも使用できる他のツールがありますか?

詳細:

  • Ubuntu 22.04システムでTelnetを実行する
  • サーバーはUSR-TCP232-T2イーサネット/シリアルコンバータ
  • シリアルポートはLinuxシステムのコンソールに接続されているため、vim制御文字を実行または入力するにはバッファリングされていない透明性が必要です。

編集:問題が見つかりました。telnetデフォルトでは、「ライン」モードで実行され、文字を収集し、次にCRを入力したときにそれを送信します。 「文字」モードで実行してデータをそのまま送信する必要があります。

telnet問題:相手と変更を相談せずに「キャラクター」モードを設定できません。証明:構成されていないTelnetを使用してシリアルアダプタに接続すると、アダプタに送信されたネゴシエートされた文字を受け取ることができません。ただし、を^]使用してコマンドモードに入ったら、次のように入力すると、すぐに相手と交渉して混乱を招きますmode character。 (ファイルをtelnet使用して文字モードで接続を設定しても.telnetrc同じことが起こります。)

したがって、そのポートに偽のコマンドバイトを送信せずにtelnet「文字」モデルのポートに接続することは不可能です。別の解決策が必要です。

答え1

netcat()を使ってnc透明な接続を作成できます。

   nc {host} {port}

クライアントは、ネゴシエーションを正しく試みない場合でも、telnet常にサーバーからのネゴシエーション要求に応答します。私は今回の出来事でこんなことが起きたと信じています。すべての交渉を避けるために使用できますnc

ncラインモードにあるように見えることもあります。これは事実ではなく、端末ドライバが生モードに入るように要求されていないだけです。

stty raw; nc {host} {port}

これにより、ターミナルセッションを使用して終了できなくなりますnc。他の場所から信号を送信する必要があります。

ps | grep -w nc    # 60883 pty0     00:00:00 nc
kill 60883         # ^this^

関連情報