Telnet-сервер без командной строки

Telnet-сервер без командной строки

Я ищу простой способ принимать telnet-соединения без предоставления интерфейса оболочки, что-то вроде сервера MUD. На самом деле я ищу способ обслуживания статического контента, больше похожего на:

telnet towel.blinkenlights.nl

Серверу придется запускать новый экземпляр стороннего приложения (в данном случае VLC) для каждого нового telnet-подключения и доставлять выходные данные приложения (рендеринг видео ASCII) непосредственно удаленному пользователю.

Есть ли у вас предложения, с чего можно начать?

решение1

Простейшее решение — сделать VLC оболочкой входа пользователей, например:

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

или любую другую программу, которую вы хотите запустить. Ограничением является то, что вы не можете указать аргументы командной строки. Вам, вероятно, понадобятся обычные passwdзаписи:

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

а затем дайте каждому пользователю .profileсообщение с надписью

exec /usr/bin/cvlc --(ваши варианты) playlist.xspf

или любые другие аргументы, которые вам нужны.

Я не уверен, что вы подразумеваете под "ASCII видеорендерингом". Вы хотите воспроизводить аудио/видео на рабочей станции пользователя? Пользователь использует сервер X11? Если да, то вам следует указать

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

в .profile, а затем добавьте

--x11-display "$d":0

кваши варианты. Предупреждение: существуют различные условия, которые могут привести к сбою.

решение2

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

простой сервер, который принимает соединения (TCP4-LISTEN) и создает новый дочерний процесс для каждого соединения; каждый дочерний процесс действует как одиночный ретранслятор. Клиент должен соответствовать правилам для имени процесса-демона "script" в /etc/hosts.allow и /etc/hosts.deny, в противном случае ему будет отказано в доступе (см. "man 5 hosts_access"). Для выполнения программы дочерний процесс выполняет chroot в /home/sandbox, su в пользовательскую песочницу, а затем запускает программу /home/sandbox/bin/myscript. Socat и myscript взаимодействуют через псевдотерминал (pty); stderr myscript перенаправляется в stdout, поэтому его сообщения об ошибках передаются через socat подключенному клиенту.

Вы можете изменить 5555 на 23 (номер порта Telnet по умолчанию)

Измените /bin/myscript на ваш скрипт VLC или двоичный файл.


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

EXEC:<command-line>

Разветвляет подпроцесс, который устанавливает связь со своим родительским процессом и вызывает указанную программу с помощью execvp() . <command-line> — это простая команда с аргументами, разделенными одинарными пробелами. Если имя программы содержит '/', часть после последнего '/' воспринимается как ARGV[0]. Если имя программы — это относительный путь, применяется семантика execvp() для поиска программы через $PATH. После успешного запуска программы socat записывает данные в stdin процесса и считывает из его stdout, используя сокет домена UNIX, сгенерированный socketpair() по умолчанию.


Я считаю, что подобные решения возможны с использованиемнеткатилиинетд

решение3

Если это система Linux, используйте inetdили xinetd. Создайте новую службу, указывающую на стандартный порт telnet, и укажите исполняемый файл в качестве фактической службы.

Связанный контент