我有一台服务器接受telnet连接进行管理。我想念命令历史记录,所以我想让我的telnet会话支持它。我的问题:
1)我是否必须在服务器端实现,因此服务器会将过去的命令发送到客户端,然后客户端可以重新执行?
2)无论如何都要在telnet客户端中实现这个功能(不要弄乱服务器)?
如果答案是1)那么我需要知道如何捕获并发送我的telnet会话上的向上和向下箭头键,而无需按Enter键。
答案 0 :(得分:40)
这不是服务器问题。只需将rlwrap与您的telnet客户端一起使用即可。它为您readline
提供了无编程。
$ rlwrap telnet server port
(实际上我使用nc
代替telnet
,因为它更易于使用且更强大。)
答案 1 :(得分:6)
使用socat:
socat readline,history=$HOME/.telnet_history TCP:host:23
答案 2 :(得分:1)
我假设这是您使用Perl编写的服务,基于您的标记。
您可以使用CPAN中的Term :: ReadLine模块来执行您想要的操作。从CPAN网站,这是一个基本的例子:
use Term::ReadLine;
my $term = Term::ReadLine->new('My Management Service');
my $prompt = "Enter your management command: ";
my $OUT = $term->OUT || \*STDOUT;
while ( defined ($_ = $term->readline($prompt)) ) {
my $res = eval($_);
warn $@ if $@;
print $OUT $res, "\n" unless $@;
$term->addhistory($_) if /\S/;
}