
Estou me perguntando se existe alguma maneira de fazer com que o telnet envie apenas um \n
, não um \r\n
.
Por exemplo, se um processo estiver escutando em uma porta como esta, para imprimir os bytes de qualquer tráfego recebido:
nc -l 1234 | xxd -c 1
Conectando-se a ele pelo netcat com nc localhost 1234
e digitando "hi[enter]":
0000000: 68 h
0000001: 69 i
0000002: 0a .
Conectando-se a ele via telnet com telnet localhost 1234
e digitando "hi[enter]"
0000000: 68 h
0000001: 69 i
0000002: 0d .
0000003: 0a .
O Telnet está enviando 0x0d0a em vez de 0x0a para a nova linha. Eu entendo que este é um CRLF em oposição ao LF. Ele também envia o CRLF se eu usar ^M
ou ^J
.
Achei que tinha encontrado uma solução que resolvesse diretamente esse problema, usando toggle crlf
, mas mesmo com essa opção definida, o Telnet está sempre enviando o \r\n
. Também tentei isso em vários clientes de telnet, então acho que não entendi o que a alternância deve fazer.
Tem como enviar apenas um \n
telnet, com enter ou não?
Responder1
Você pode negociarmodo binário. Uma vez neste modo você não pode sair dele. Negociação significa que o telnet
cliente enviará uma sequência de bytes especial ao servidor, que você deverá ignorar se não estiver implementando o protocolo.
Os dados subsequentes são enviados inalterados, em modo linha. Cliente:
$ telnet localhost 1234
Connected to localhost.
Escape character is '^]'.
^]
telnet> set binary
Negotiating binary mode with remote host.
hi
^]
telnet> quit
e servidor
$ 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 .
Seu telnet
cliente pode ter a opção de iniciar no modo binário ou você pode colocar uma entrada em~/.telnetrc
localhost
set binary
Você pode aplicar o modo binário independentemente em cada direção, então você pode preferir set outbinary
.
Responder2
Não emtelnet, uma vez que o RFC aplicável especifica retorno de carro/alimentação de linha como final de linha. VerApêndice C na RFC 5198.