非コマンドライン Telnet サーバー

非コマンドライン Telnet サーバー

私は、シェル インターフェイスを提供せずに Telnet 接続を受け入れる簡単な方法を探しています。これは、MUD サーバーのようなもので、実際には次のような静的コンテンツを提供したいと考えています。

telnet towel.blinkenlights.nl

サーバーは、新しい Telnet 接続ごとにサードパーティ アプリケーション (この場合は VLC) の新しいインスタンスを起動し、アプリケーションの出力 (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) を受け入れ、各接続ごとに新しい子プロセスをフォークする単純なサーバー。各子は単一のリレーとして機能します。クライアントは、/etc/hosts.allow および /etc/hosts.deny のデーモン プロセス名 "script" のルールに一致する必要があります。一致しない場合はアクセスを拒否されます ("man 5 hosts_access" を参照)。プログラムを実行するために、子プロセスは /home/sandbox に chroot し、ユーザー sandbox に su してから、プログラム /home/sandbox/bin/myscript を起動します。socat と myscript は疑似 tty (pty) を介して通信します。myscript の stderr は 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] として取得されます。プログラム名が相対パスの場合、$PATH を介してプログラムを見つけるための execvp() セマンティクスが適用されます。プログラムが正常に起動すると、 socat はプロセスの stdin にデータを書き込み、デフォルトで socketpair() によって生成された UNIX ドメイン ソケットを使用して stdout からデータを読み取ります。


同様の解決策は以下でも可能だと思いますネットキャットまたはinetd

答え3

Linux システムの場合は、inetdまたはを使用しますxinetd。標準の Telnet ポートを指す新しいサービスを作成し、実行可能ファイルを実際のサービスとして指定します。

関連情報