Telnet enviar Ctrl-C

14

Eu uso o telnet para conectar-se a um servidor de terminal, que proxies o tráfego para uma porta RS-232.

Infelizmente, ao usar alguns dos dispositivos, não é possível enviar o caractere CTRL+ C(0x03). Em vez de transmitir o personagem, parece que o cliente local percebeu o pressionamento de tecla e fiquei no "outro modo". O que eu queria era apenas enviar um personagem.

Para depurar isso, eu tenho brincado com:

^] toggle termdata

e

^] toggle options

Aqui está o que acontece quando eu pressiono CTRL+ Cem um servidor de terminal que não funciona:

telnet 10.10.129.101 2012
Trying 10.10.129.101...
Connected to termserv-val3 (10.10.129.101).
Escape character is '^]'.
^]
telnet> toggle options
Will show option processing.
^]
telnet> toggle termdata
Will print hexadecimal representation of terminal traffic.
SENT IAC IP
SENT DO TIMING MARK

Aqui está o que acontece nos servidores de terminal que funcionam:

telnet termserv-val2 2012
Trying 10.10.128.93...
Connected to termserv-val2 (10.10.128.93).
Escape character is '^]'.

telnet> toggle options
Will show option processing.

telnet> toggle termdata
Will print hexadecimal representation of terminal traffic.
< 0x0   03
^C

Eu tentei, toggle localcharsmas não fez nenhuma diferença.

Eu também tentei o mode characterque me permitiu enviar o caractere CTRL+ C, mas aqui não recebi nenhuma saída do dispositivo.

Como posso configurar meu cliente de telnet para resolver isso?

Allan
fonte
2
Que servidor de terminal é esse?
22412 Michael JacksonJul

Respostas:

5

Você já tentou desativar os caracteres locais no seu cliente de telnet?

bash$ telnet
telnet> toggle localchars
Won't recognize certain control characters.
telnet> open myhost

Você também pode colocar esse comando no ~/.telnetrcarquivo, dependendo da sua versão do telnet.

jlp
fonte
Eu tentei isso (leia a última parte da pergunta)
Allan
3

Você pode tentar o modo de limpeza de 8 bits ... ele impede que o telnet interprete grande parte dos dados

telnet -8 host port

(Este é um tiro no escuro)

Na maioria das vezes, você está no caminho certo, tentando fazer com que o telnet pare de pré-interpretar as teclas ... como o CTRL-C e o CTRL-Z e outros. O modo de 8 bits deve ajudar.

lornix
fonte
1
Eu tentei isso, não funcionou. Fiz como sempre encontrei outra solução: o servidor de terminal pode ser configurado para agir como "modo de servidor TCP" (configurações padrão, com as quais tenho problemas), mas se isso for alterado para "modo COM real", as coisas estão funcionando. Eu não tenho idéia do que os realmente diferenças são ...
Allan
parabéns por encontrar uma solução. Sempre bom resolver um problema.
Lornix 6/07/12
Ano ... Eu não estou muito feliz com esta solução, eu preferiria tê-lo resolvido por fazer mudanças na minha configuração do cliente telnet
Allan
1
@Allan, envie seu comentário como resposta em marcá-lo como a resposta correta para corrigir o problema, obrigado.
Não disponível
3

Isso pode ajudar, embora use outras 3 ferramentas em vez de telnet:

echo 03 | xxd -r -p | nc host port

bambam
fonte
1

^Cé um caractere de interrupção. Você pode enviá-lo com um escape telnet (o padrão é ^]) e depois send brk.

dadinck
fonte
3
A BRKsequência do Telnet tem um significado específico da implementação no lado receptor e não é o mesmo que enviar o caractere ETX( ^C). Nos sistemas Unixy, geralmente significa fazer o que TCSBRK ioctlquer que o TTY telnetdesteja usando. Em dispositivos seriais, isso geralmente significa manter a linha de transmissão baixa por um quarto a meio segundo.
Blrfl
Não tenho certeza se isso muda alguma coisa, mas também há quitcomando no telnet disponível.
VasyaNovikov 14/10/19
0

Usei 'opções de alternância' e 'alternar dados do termo' para verificar se a situação no meu site corresponde à do pôster original. Consegui enviar o caractere ^ C (control-C) especificamente com o comando telnet 'send ip', conforme descrito na documentação. No meu caso, eu coloquei todos os 3 comandos no meu ~ / .telnetrc

robm
fonte
0

Usar

nc host port

se o que você deseja é apenas conectar a uma porta do servidor e interromper Ctrl Cquando necessário. Você pode instalar nccom o netcatpacote.

PS: a idéia é retirada da resposta @ bambam-s, mas não sei qual é o significado do xxdcomando que foi usado e funciona muito bem sem ele no meu caso de uso.

VasyaNovikov
fonte