Estou tentando configurar um Telnet reverso (Telnet para COM) no Mac OS X 10.9.5 (Mavericks). O Mac está conectado a um dispositivo serial. Não tenho problemas para acessar o dispositivo serial do Mac usando screen:
screen /dev/cu.USBserial
Porém, gostaria de acessar o dispositivo remotamente, via Telnet.
Tentei usar o Netcat ( nc
) e obtive sucesso limitado. O comando que usei é:
nc -l 9999 > /dev/cu.USBserial < /dev/cu.USBserial
E então posso fazer Telnet para o dispositivo. No entanto, não funciona por dois motivos:
- Para interface de usuário interativa, a entrada é essencialmente armazenada em buffer de linha até eu acertar return.
- Todas as minhas contribuições são ecoadas de volta para mim. Na vida real, o dispositivo deveria ser aquele que ecoa meus caracteres de entrada.
Qual é a maneira certa de fazer isso?
Responder1
O método mais simples:
telnet
(ou melhorssh
) para o seu Mac- digite seu
screen /dev/cu.USBserial
comando
Agora, se você não deseja se conectar ao seu Mac diretamente na porta COM, ou permitir que outros façam isso e nada mais, aqui está uma maneira:
- Crie um usuário dedicado no seu Mac. Vamos chamá-lo de "comport" e fazer login como este usuário.
Crie um script de conexão para este usuário. Crie um arquivo chamado
/Users/comport/log2com.sh
e insira estas linhas nele:#!/bin/bash /usr/bin/screen -R /dev/cu.USBserial
Permita que o script seja executado executando este comando em seu terminal:
chmod +x /Users/comport/log2com.sh
Por fim, defina este script como o shell de login do seu usuário. Para isso, em Preferências do Sistema > Usuários e Grupos, na lista de usuários, clique com o botão direito no usuário e selecione “Opção Avançada”. Em seguida, no campo "shell", digite
/Users/comport/log2com.sh
e clique em OK.
É isso. Agora você pode fazer telnet (eu recomendo ssh
!) para esse login no seu Mac para entrar diretamente na tela.
Observe que para sair você precisa fazer isso da mesma maneira que a tela (geralmente Ctrl+ A, então :quit
Return).
Testei isso no OSX 10.10.5. Deixe-me saber se funcionou para você.
Responder2
Eu encontrei uma solução. O pacote Python PySerial possui uma classe rfc2217. Eles têm um aplicativo de exemplo que funciona como servidor Telnet:
https://pyserial.readthedocs.org/en/latest/examples.html
$ python rfc2217_server.py /dev/tty.serial
abre uma porta 2217 que permite a conexão do telnet. É exatamente o que eu queria.