비 명령 줄 텔넷 서버 응용 프로그램 (이 경우 VLC)의 새 인스턴스를

나는 MUD 서버와 같은 쉘 인터페이스를 제공하지 않고 텔넷 연결을 허용하는 간단한 방법을 찾고있다. 실제로 정적 컨텐츠를 제공하려고합니다.

telnet towel.blinkenlights.nl

서버는 새로운 텔넷 연결마다 타사 응용 프로그램 (이 경우 VLC)의 새 인스턴스를 시작하고 응용 프로그램의 출력 (ASCII 비디오 렌더링)을 원격 사용자에게 직접 제공해야합니다.

내가 여기서 시작할 수있는 곳에 대한 제안은?



답변

단순한 해결책은 다음과 같이 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

당신의 선택 . 경고 :이 문제를 일으킬 수있는 다양한 조건이 있습니다.


답변

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) 및 fork
  각 연결에 대한 자식 프로세스. 모든 어린이는 하나의 릴레이 역할을합니다.
  클라이언트는 데몬 프로세스 이름 “script”에 대한 규칙과 일치해야합니다.
  /etc/hosts.allow 및 /etc/hosts.deny, 그렇지 않으면 액세스가 거부됩니다.
  ( “man 5 hosts_access”참조). 프로그램을 실행하기 위해 아동
  chroot를 / home / sandbox로, su를 사용자 샌드 박스로, 그리고 나서
  / home / sandbox / bin / myscript 프로그램을 시작합니다. Socat 및 myscript
  pseudo tty (pty)를 통해 통신한다. myscript의 stderr로 리디렉션됩니다.
  stdout, 그래서 그것의 에러 메시지는 socat을 통해
  연결된 클라이언트.

5555를 23 (텔넷의 기본 포트 번호)으로 변경할 수 있습니다.

/ bin / myscript를 VLC 스크립트 또는 바이너리로 변경하십시오.


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

EXEC:<command-line>

통신을 수립하는 하위 프로세스를 포킹합니다.
  부모 프로세스와 함께 실행하고 지정된 프로그램을 다음과 같이 호출합니다.
  execvp (). & lt; 명령 줄 & gt; 인수가 분리 된 간단한 명령입니다.
  단일 공백으로. 프로그램 이름에 ‘/’가 포함 된 경우,
  마지막 ‘/’는 ARGV [0]으로 간주됩니다. 프로그램 이름이 상대 일 경우
  경로에서 $ PATH를 통해 프로그램을 찾기위한 execvp () 의미가 적용됩니다.
  프로그램이 성공적으로 시작된 후, socat은
  프로세스를 생성하고 UNIX 도메인 소켓을 사용하여 stdout에서 읽음
  socketpair ()에 의해 기본값 당.


나는 비슷한 솔루션이 가능하다고 믿는다. 넷캣 또는 inetd


답변

이것이 리눅스 시스템이라면, inetd 또는 xinetd. 표준 텔넷 포트를 가리키는 새 서비스를 만들고 실행 파일을 실제 서비스로 지정하십시오.