私の計画は、世界中のTelnetに接続する小さなインタラクティブプログラムであるルーティングサーバーを提供することです。次のとおりです。telnet://route-server.he.net
最小限の例として、socatを介して提供される単純なbashで始めましょう。
socat TCP-LISTEN:9001,reuseaddr,crnl,fork EXEC:bash,pty,stderr,sane,setsid,sigint,echo=0
これでTelnetを使用して接続します。
$ telnet localhost 9001
最初はうまくいくようです。
$ echo foo
foo
問題は、一部の特殊文字(ESC、矢印キーなど)がシェルエスケープコードで印刷されることです。 「上矢印」の例:
$ ^[[A
foo
また、クリック/スクロール/...を実行すると、エスケープコードも印刷されます。
$ ^[[M r>^[[M#r>
問題は、クライアントが既存のルーティングサーバーと同様に、クライアントオプションやハッキングなしでTelnetを引き続き使用できるように、この動作をどのように変更できるかということです。
答え1
iporのコメントに基づき、以下の設定でサービスを実行しました。
xinetdはGNU Inetutilsでtelnetdを実行します(ftp://ftp.gnu.org/gnu/inetutils/)
server = /path/to/custom/telnetd
server_argsは、必要なオプションでBirdcを実行するためのラッパースクリプトを指すexec-Stringを定義します。
server_args = -h -E "/opt/bird-telnet.sh"
/opt/bird-telnet.sh は次のようになります。
#!/bin/bash
/usr/sbin/birdc -r -s /var/run/bird/bird.ctl