Telnetが\n
ではなく\r\n
のみを送信するようにする方法があるかどうか疑問に思っています。
たとえば、1つのプロセスがこのようなポートでリッスンしている場合、受信したトラフィックのバイトを出力するには、次のようにします。
nc -l 1234 | xxd -c 1
nc localhost 1234
を使用してnetcatから接続し、「hi [enter]」と入力します。
0000000: 68 h
0000001: 69 i
0000002: 0a .
telnet localhost 1234
でtelnetからそれに接続し、「hi [enter]」と入力します
0000000: 68 h
0000001: 69 i
0000002: 0d .
0000003: 0a .
Telnetは、改行のために0x0aではなく0x0d0aを送信しています。これはLFではなくCRLFであることを理解しています。 ^M
または^J
を使用すると、CRLFも送信されます。
toggle crlf
を使用してこの問題に直接対処する解決策を見つけたと思いましたが、このオプションを設定しても、Telnetは常に\r\n
を送信しています。私はこれをさまざまなtelnetクライアントでも試したので、切り替えが何をするのかを誤解していると思います。
Enterまたはその他の方法で、\n
だけをTelnet経由で送信する方法はありますか?
バイナリモードをネゴシエートできます。このモードになると、そのままにしておくことはできません。ネゴシエーションとは、telnet
クライアントが特別なバイトシーケンスをサーバーに送信することを意味します。プロトコルを実装していない場合は、これを無視する必要があります。
後続のデータは、ラインモードで変更されずに送信されます。クライアント:
$ telnet localhost 1234
Connected to localhost.
Escape character is '^]'.
^]
telnet> set binary
Negotiating binary mode with remote Host.
hi
^]
telnet> quit
とサーバー
$ nc -l 1234 | xxd -c 1
00000000: ff .
00000001: fd .
00000002: 00 .
00000003: ff .
00000004: fb .
00000005: 00 .
00000006: 68 h
00000007: 69 i
00000008: 0a .
telnet
クライアントには、バイナリモードで開始するオプションがあるか、~/.telnetrc
にエントリを置くことができます。
localhost
set binary
バイナリモードは各方向に個別に適用できるため、set outbinary
を使用することもできます。
telnetにはありません。これは、該当するRFCがキャリッジリターン/ラインフィードを行末として指定しているためです。 RFC 5198の付録C を参照してください。