Servidor Telnet sem linha de comando

Servidor Telnet sem linha de comando

Estou procurando uma maneira simples de aceitar conexões telnet sem fornecer uma interface shell, como um servidor MUD. Na verdade, estou procurando fornecer conteúdo estático, mais como:

telnet towel.blinkenlights.nl

O servidor terá que iniciar uma nova instância de um aplicativo de terceiros (neste caso, VLC) para cada nova conexão Telnet e entregar a saída do aplicativo (renderização de vídeo ASCII) diretamente ao usuário remoto.

Alguma sugestão de onde posso começar aqui?

Responder1

A solução simples é tornar o VLC o shell de login dos usuários, como em:

joe:AU03oahyYRjl6:1234:56:Joe Smith:/usr/joe:/usr/bin/cvlc

ou qualquer programa que você deseja executar. Uma limitação disso é que você não pode especificar argumentos de linha de comando. Você provavelmente precisará ter passwdentradas normais:

joe:AU03oahyYRjl6:1234:56:Joe Smith:/usr/joe:/bin/sh

e então dê a cada usuário um .profileque diz

exec /usr/bin/cvlc --(suas opções) playlist.xspf

ou quaisquer argumentos que você quiser.

Não tenho certeza do que você quer dizer com "renderização de vídeo ASCII". Você deseja reproduzir áudio/vídeo na estação de trabalho do usuário? O usuário está executando um servidor X11? Se sim, você deve colocar

w=`who am i`
d=`expr "$w" : '.*(\(.*\))'`

no e .profile, em seguida, adicione

--x11-display "$d":0

parasuas opções. Aviso: existem várias condições que podem causar falha.

Responder2

http://www.dest-unreach.org/socat/doc/socat.html#EXAMPLE_ADDRESS_EXEC

socat TCP4-LISTEN:5555,fork,tcpwrap=script \
EXEC:/bin/myscript,chroot=/home/sandbox,su-d=sandbox,pty,stderr

um servidor simples que aceita conexões (TCP4-LISTEN) e bifurca um novo processo filho para cada conexão; cada criança atua como um único revezamento. O cliente deve corresponder às regras para o nome do processo daemon "script" em /etc/hosts.allow e /etc/hosts.deny, caso contrário o acesso será recusado (consulte "man 5 hosts_access"). Para executar o programa, o processo filho chroot para /home/sandbox, su para o sandbox do usuário e, em seguida, inicia o programa /home/sandbox/bin/myscript. Socat e myscript se comunicam através de um pseudo tty (pty); O stderr do myscript é redirecionado para stdout, então suas mensagens de erro são transferidas via socat para o cliente conectado.

Você pode alterar 5555 para 23 (número da porta padrão do Telnet)

Altere /bin/myscript para seu script VLC ou binário.


http://www.dest-unreach.org/socat/doc/socat.html#ADDRESS_TYPES

EXEC:<command-line>

Bifurca um subprocesso que estabelece comunicação com seu processo pai e invoca o programa especificado com execvp() . <linha de comando> é um comando simples com argumentos separados por espaços simples. Se o nome do programa contiver um '/', a parte após o último '/' será considerada ARGV[0]. Se o nome do programa for um caminho relativo, a semântica execvp() para localizar o programa via $PATH se aplica. Após o início bem-sucedido do programa, socat grava dados no stdin do processo e lê seu stdout usando um soquete de domínio UNIX gerado por socketpair() por padrão.


Acredito que soluções semelhantes sejam possíveis usandonetcatouinetd

Responder3

Se este for um sistema Linux, use inetdou xinetd. Crie um novo serviço apontando para a porta telnet padrão e especifique seu executável como o serviço real.

informação relacionada