web-dev-qa-db-ja.com

Telnetで「\ n」だけを送信する方法はありますか?

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経由で送信する方法はありますか?

6
shelly

バイナリモードをネゴシエートできます。このモードになると、そのままにしておくことはできません。ネゴシエーションとは、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を使用することもできます。

13
meuh

telnetにはありません。これは、該当するRFCがキャリッジリターン/ラインフィードを行末として指定しているためです。 RFC 5198の付録C を参照してください。

1
Thomas Dickey