Nicht-Befehlszeilen-Telnet-Server

Nicht-Befehlszeilen-Telnet-Server

Ich suche nach einer einfachen Möglichkeit, Telnet-Verbindungen zu akzeptieren, ohne eine Shell-Schnittstelle bereitzustellen, ähnlich wie ein MUD-Server. Eigentlich möchte ich statische Inhalte bereitstellen, eher wie:

telnet towel.blinkenlights.nl

Der Server muss für jede neue Telnet-Verbindung eine neue Instanz einer Drittanbieteranwendung (in diesem Fall VLC) starten und die Ausgabe der Anwendung (ASCII-Video-Rendering) direkt an den Remote-Benutzer übermitteln.

Irgendwelche Vorschläge, wo ich hier anfangen kann?

Antwort1

Die einfachste Lösung besteht darin, VLC zur Anmelde-Shell der Benutzer zu machen, wie folgt:

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

oder welches Programm Sie auch immer ausführen möchten. Eine Einschränkung hierbei ist, dass Sie keine Befehlszeilenargumente angeben können. Sie benötigen wahrscheinlich normale passwdEinträge:

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

und geben Sie dann jedem Benutzer eine, .profiledie besagt

exec /usr/bin/cvlc --(Deine Optionen) playlist.xspf

oder welche Argumente Sie auch immer wollen.

Ich bin mir nicht sicher, was Sie mit „ASCII-Video-Rendering“ meinen. Möchten Sie Audio/Video auf der Workstation des Benutzers abspielen? Betreibt der Benutzer einen X11-Server? Wenn ja, sollten Sie

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

in .profileund fügen Sie dann hinzu

--x11-display "$d":0

ZuDeine Optionen. Achtung: Es gibt verschiedene Bedingungen, die zu einem Fehler führen können.

Antwort2

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

ein einfacher Server, der Verbindungen akzeptiert (TCP4-LISTEN) und für jede Verbindung einen neuen Kindprozess erstellt; jeder Kindprozess fungiert als einzelnes Relay. Der Client muss die Regeln für den Daemonprozessnamen „script“ in /etc/hosts.allow und /etc/hosts.deny erfüllen, andernfalls wird ihm der Zugriff verweigert (siehe „man 5 hosts_access“). Um das Programm auszuführen, wechselt der Kindprozess per chroot zu /home/sandbox, per su zur Benutzer-Sandbox und startet dann das Programm /home/sandbox/bin/myscript. Socat und myscript kommunizieren über ein Pseudo-TTY (pty); der stderr von myscript wird auf stdout umgeleitet, sodass seine Fehlermeldungen über socat an den verbundenen Client übertragen werden.

Sie können 5555 in 23 ändern (die Standard-Portnummer von Telnet).

Ändern Sie /bin/myscript in Ihr VLC-Skript oder Ihre Binärdatei.


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

EXEC:<command-line>

Forkt einen Unterprozess, der die Kommunikation mit seinem übergeordneten Prozess aufbaut und das angegebene Programm mit execvp() aufruft. <command-line> ist ein einfacher Befehl mit Argumenten, die durch einzelne Leerzeichen getrennt sind. Wenn der Programmname einen '/' enthält, wird der Teil nach dem letzten '/' als ARGV[0] verwendet. Wenn der Programmname ein relativer Pfad ist, gilt die execvp()-Semantik zum Auffinden des Programms über $PATH. Nach erfolgreichem Programmstart schreibt socat Daten in die Standardeingabe des Prozesses und liest von dessen Standardausgabe, wobei standardmäßig ein von socketpair() generierter UNIX-Domain-Socket verwendet wird.


Ich glaube, dass ähnliche Lösungen möglich sind mitNetzkatzeoderinetd

Antwort3

Wenn es sich um ein Linux-System handelt, verwenden Sie inetdoder xinetd. Erstellen Sie einen neuen Dienst, der auf den Standard-Telnet-Port verweist, und geben Sie Ihre ausführbare Datei als eigentlichen Dienst an.

verwandte Informationen