2 votes

Serveur Telnet à interface graphique

Je cherche un moyen simple d'accepter des connexions telnet sans fournir une interface shell, un peu comme un serveur MUD. En fait, je cherche à servir du contenu statique, plus comme:

telnet towel.blinkenlights.nl

Le serveur devra lancer une nouvelle instance d'une application tierce (dans ce cas, VLC) pour chaque nouvelle connexion telnet, et envoyer la sortie de l'application (rendu vidéo ASCII) directement à l'utilisateur distant.

Des suggestions sur où je peux commencer ici?

1voto

Scott Points 20468

La solution simple est de faire de VLC le shell de connexion des utilisateurs, comme ceci :

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

ou tout autre programme que vous voulez exécuter. Une limitation est que vous ne pouvez pas spécifier d'arguments en ligne de commande. Vous devez probablement avoir des entrées de passwd normales :

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

et donner à chaque utilisateur un fichier .profile qui dit

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

ou tout autre argument que vous voulez.

Je ne suis pas sûr de ce que vous entendez par "rendu vidéo ASCII". Voulez-vous lire de l'audio/vidéo sur la station de travail de l'utilisateur ? L'utilisateur exécute-t-il un serveur X11 ? Si c'est le cas, vous devriez ajouter

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

dans le fichier .profile, puis ajouter

--x11-display "$d":0

à vos options. Attention : il existe diverses conditions qui peuvent entraîner un échec de cette méthode.

1voto

RedGrittyBrick Points 78148

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 serveur simple qui accepte les connexions (TCP4-LISTEN) et créé un nouveau processus enfant pour chaque connexion; chaque enfant agit comme un relais unique. Le client doit respecter les règles pour le nom du processus démon "script" dans /etc/hosts.allow et /etc/hosts.deny, sinon l'accès est refusé (voir "man 5 hosts_access"). Pour exécuter le programme, le processus enfant est chrooté vers /home/sandbox, su vers l'utilisateur sandbox, et ensuite démarre le programme /home/sandbox/bin/myscript. Socat et myscript communiquent via un pseudo-terminal (pty); stderr de myscript est redirigé vers stdout, donc ses messages d'erreur sont transférés via socat vers le client connecté.

Vous pourriez changer 5555 en 23 (numéro de port par défaut de Telnet)

Changer /bin/myscript en votre script ou binaire VLC.


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

EXEC:

Créé un sous-processus qui établit une communication avec son processus parent et invoque le programme spécifié avec execvp(). est une commande simple avec des arguments séparés par des espaces simples. Si le nom du programme contient un '/', la partie après le dernier '/' est prise comme ARGV[0]. Si le nom du programme est un chemin relatif, les sémantiques execvp() pour trouver le programme via $PATH s'appliquent. Après le démarrage réussi du programme, socat écrit des données dans stdin du processus et lit depuis stdout en utilisant un socket de domaine UNIX généré par socketpair() par défaut.


Je crois que des solutions similaires sont possibles en utilisant netcat ou inetd

0voto

LawrenceC Points 70381

Si c'est un système linux, utilisez inetd ou xinetd. Créez un nouveau service pointant vers le port de telnet standard et spécifiez votre exécutable comme le service réel.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X