关闭echo IO :: Socket :: INET

时间:2012-08-08 01:49:40

标签: perl sockets

我正在尝试使用perl创建远程登录脚本。我目前正在使用

获取输入数据
$var = <$client>; 
chomp $var;

但是,我正在尝试让客户端输入密码,我希望通过不回显输入的内容以与客户端的linux方式隐藏密码。我有什么方法可以做到这一点吗?

编辑:

$serv = IO::Socket::INET->new ( 
Proto => 'tcp',
LocalPort => $port,
Listen => 10,
Reuse => 1)
|| die "Can't create server: $!";

while ($client = $serv->accept()) {
eval {
$client->autoflush(1); # Always remember to flush!
$who = $client->peerhost;
print STDERR "Connection from $who\n";
print $client hostname . " login: ";
$usr = <$client>;
chomp $usr;
$usr =~ s/\W//g;
print STDERR "User $usr\n";
die unless (length $usr < 20 && length $usr > 1);
print $client "Encrypted Password: ";
$pass = <$client>;
chomp $pass;
die unless (length $pass < 20 && length $pass > 1);
print STDERR "$who: Pass $pass\n";
};
close $client;
} 

1 个答案:

答案 0 :(得分:0)

这是本地控制台回显,与您的套接字无关。

有许多方法可以使用Perl关闭控制台回声,但我最喜欢的是IO::Termios(也许我有偏见因为我写了它;)

use IO::Termios;
my $stdin = IO::Termios->new(\*STDIN);
$stdin->setflag_echo(0);