Servidor telnet de linha de não-comando

2

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

telnet towel.blinkenlights.nl

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

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

    
por Mikkel 20.08.2012 / 21:09

3 respostas

1

A solução simplista é 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ê queira executar. Uma limitação para isso é que você não pode especificar argumentos de linha de comando. Você provavelmente precisa ter entradas normais de passwd :

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

e, em seguida, forneça a cada usuário .profile que diz

exec /usr/bin/cvlc --(your options) playlist.xspf

ou qualquer outro argumento que você queira.

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

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

no .profile e, em seguida, adicione

--x11-display "$d":0

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

    
por 20.08.2012 / 23:17
1

link

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

a simple server that accepts connections (TCP4-LISTEN) and fork's a new child process for each connection; every child acts as single relay. The client must match the rules for daemon process name "script" in /etc/hosts.allow and /etc/hosts.deny, otherwise it is refused access (see "man 5 hosts_access"). For EXEC'uting the program, the child process chroot's to /home/sandbox, su's to user sandbox, and then starts the program /home/sandbox/bin/myscript. Socat and myscript communicate via a pseudo tty (pty); myscript's stderr is redirected to stdout, so its error messages are transferred via socat to the connected client.

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

Mude / bin / myscript para o seu script VLC ou binário.

link

EXEC:<command-line>

Forks a sub process that establishes communication with its parent process and invokes the specified program with execvp() . <command-line> is a simple command with arguments separated by single spaces. If the program name contains a '/', the part after the last '/' is taken as ARGV[0]. If the program name is a relative path, the execvp() semantics for finding the program via $PATH apply. After successful program start, socat writes data to stdin of the process and reads from its stdout using a UNIX domain socket generated by socketpair() per default.

Acredito que soluções semelhantes são possíveis usando netcat ou inetd

    
por 21.08.2012 / 00:20
0

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

    
por 21.08.2012 / 00:50