Servidor Telnet sin línea de comando

Servidor Telnet sin línea de comando

Estoy buscando una forma sencilla de aceptar conexiones telnet sin proporcionar una interfaz de shell, algo así como un servidor MUD. De hecho, estoy buscando ofrecer contenido estático, más como:

telnet towel.blinkenlights.nl

El servidor tendrá que iniciar una nueva instancia de una aplicación de terceros (en este caso, VLC) para cada nueva conexión telnet y entregar la salida de la aplicación (representación de video ASCII) directamente al usuario remoto.

¿Alguna sugerencia sobre por dónde puedo empezar aquí?

Respuesta1

La solución simple es hacer que VLC sea el shell de inicio de sesión de los usuarios, como en:

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

o cualquier programa que quieras ejecutar. Una limitación de esto es que no puede especificar argumentos de línea de comandos. Probablemente necesites tener passwdentradas normales:

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

y luego darle a cada usuario un .profileque diga

exec /usr/bin/cvlc --(sus opciones) playlist.xspf

o los argumentos que quieras.

No estoy seguro de lo que quieres decir con "representación de vídeo ASCII". ¿Quieres reproducir audio/vídeo en la estación de trabajo del usuario? ¿El usuario está ejecutando un servidor X11? Si es así deberías poner

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

en el .profiley luego agregue

--x11-display "$d":0

asus opciones. Advertencia: existen varias condiciones que pueden hacer que esto falle.

Respuesta2

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

un servidor simple que acepta conexiones (TCP4-LISTEN) y bifurca un nuevo proceso hijo para cada conexión; cada niño actúa como único relevo. El cliente debe coincidir con las reglas para el nombre del proceso demonio "script" en /etc/hosts.allow y /etc/hosts.deny; de lo contrario, se le negará el acceso (consulte "man 5 hosts_access"). Para EJECUTAR el programa, el proceso secundario va a /home/sandbox, su al usuario sandbox y luego inicia el programa /home/sandbox/bin/myscript. Socat y myscript se comunican mediante un pseudo tty (pty); El stderr de myscript se redirige a stdout, por lo que sus mensajes de error se transfieren a través de socat al cliente conectado.

Puede cambiar 5555 a 23 (el número de puerto predeterminado de Telnet)

Cambie /bin/myscript a su script o binario VLC.


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

EXEC:<command-line>

Bifurca un subproceso que establece comunicación con su proceso principal e invoca el programa especificado con execvp(). <command-line> es un comando simple con argumentos separados por espacios simples. Si el nombre del programa contiene un '/', la parte después del último '/' se toma como ARGV[0]. Si el nombre del programa es una ruta relativa, se aplica la semántica execvp() para encontrar el programa a través de $PATH. Después de un inicio exitoso del programa, socat escribe datos en la entrada estándar del proceso y los lee desde su salida estándar utilizando un socket de dominio UNIX generado por socketpair() de forma predeterminada.


Creo que son posibles soluciones similares usandonetcatoinetd

Respuesta3

Si se trata de un sistema Linux, utilice inetdo xinetd. Cree un nuevo servicio que apunte al puerto telnet estándar y especifique su ejecutable como el servicio real.

información relacionada