Qualquer forma de enviar apenas “\ n” no Telnet?

5

Gostaria de saber se existe alguma maneira de fazer com que o telnet envie somente \n , não \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 do netcat com nc localhost 1234 e digitando "hi [enter]":

0000000: 68  h
0000001: 69  i
0000002: 0a  .

Conectando-se a partir do telnet com telnet localhost 1234 e digitando "hi [enter]"

0000000: 68  h
0000001: 69  i
0000002: 0d  .
0000003: 0a  .

Telnet está enviando 0x0d0a em vez de 0x0a para a nova linha. Eu entendo que isso é um CRLF em oposição a LF. Ele também envia o CRLF se eu usar ^M ou ^J .

Eu pensei ter encontrado uma solução que resolvesse diretamente esse problema, usando toggle crlf , mas mesmo com essa opção definida, o Telnet sempre envia o \r\n . Eu também tentei isso em vários clientes de telnet, então eu estou supondo que eu estou entendendo mal o que a toggling deveria fazer.

Qualquer forma de enviar apenas um \n através do telnet, com enter ou de outra forma?

    
por shelly 17.12.2016 / 20:50

2 respostas

12

Você pode negociar modo binário . Uma vez neste modo, você não pode deixá-lo. Negociação significa que o cliente telnet enviará uma seqüência especial de bytes para o servidor, que você terá que ignorar se não estiver implementando o protocolo.

Os dados subseqüentes são enviados inalterados, no modo de 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 cliente telnet pode ter uma opção para iniciar no modo binário, ou você pode colocar uma entrada em ~/.telnetrc

localhost
 set binary

Você pode aplicar o modo binário de forma independente em cada direção, então você pode preferir set outbinary .

    
por 17.12.2016 / 21:21
1

Não está em telnet , pois o RFC aplicável especifica o retorno de linha / feed de linha como fim da linha. Veja Apêndice C no RFC 5198 .

    
por 17.12.2016 / 20:57