
Ich frage mich, ob es eine Möglichkeit gibt, Telnet dazu zu bringen, nur ein \n
und kein zu senden \r\n
.
Wenn beispielsweise ein Prozess auf einem Port wie diesem lauscht, können Sie die Bytes des empfangenen Datenverkehrs wie folgt ausdrucken:
nc -l 1234 | xxd -c 1
Stellen Sie über Netcat eine Verbindung dazu her nc localhost 1234
und geben Sie „hi[enter]“ ein:
0000000: 68 h
0000001: 69 i
0000002: 0a .
Stellen Sie über Telnet eine Verbindung dazu her telnet localhost 1234
und geben Sie „hi[enter]“ ein.
0000000: 68 h
0000001: 69 i
0000002: 0d .
0000003: 0a .
Telnet sendet für die neue Zeile 0x0d0a statt 0x0a. Ich verstehe, dass dies ein CRLF und kein LF ist. Es sendet auch das CRLF, wenn ich ^M
oder verwende ^J
.
Ich dachte, ich hätte eine Lösung gefunden, die dieses Problem direkt behebt, indem ich verwende toggle crlf
, aber selbst mit dieser Option sendet Telnet immer die \r\n
. Ich habe dies auch auf verschiedenen Telnet-Clients versucht, daher nehme ich an, dass ich den Zweck des Umschaltens falsch verstehe.
Gibt es eine Möglichkeit, einfach \n
über Telnet zu senden, mit der Eingabetaste oder auf andere Weise?
Antwort1
Sie können verhandelnBinärmodus. Sobald Sie sich in diesem Modus befinden, können Sie ihn nicht mehr verlassen. Verhandlung bedeutet, dass der telnet
Client eine spezielle Bytefolge an den Server sendet, die Sie ignorieren müssen, wenn Sie das Protokoll nicht implementieren.
Nachfolgende Daten werden unverändert im Zeilenmodus gesendet. Client:
$ telnet localhost 1234
Connected to localhost.
Escape character is '^]'.
^]
telnet> set binary
Negotiating binary mode with remote host.
hi
^]
telnet> quit
und Server
$ 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 .
Ihr telnet
Client hat möglicherweise die Option, im Binärmodus zu starten, oder Sie können einen Eintrag in~/.telnetrc
localhost
set binary
Sie können den Binärmodus unabhängig in jede Richtung anwenden, daher bevorzugen Sie möglicherweise set outbinary
.
Antwort2
Nicht inTelnet, da der anwendbare RFC als Zeilenende einen Wagenrücklauf/Zeilenvorschub angibt. SieheAnhang C in RFC 5198.