通过 perl 的 expect 自动化和捕获登录提示
Automate and capture login prompt through perl's expect
我正在尝试在 Perl 中自动显示登录提示
我正在使用 SSHGetCredentials('login_prompt' => 1)
生成登录提示,这是 perl 的 Expect::SSH
库的一个功能
我的代码是这样的,这里 REST::Client->getCredentials()
内部调用 SSHGetCredentials('login_prompt' => 1)
会调用登录提示和 return 输入的用户 ID 和密码。
use Expect;
my $command = "perl -e 'use REST::Client; REST::Client->getCredentials()'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
现在想验证一下是不是我传的用户名或密码,所以想抓包比较
我怎样才能捕捉到它们?
我试过这个:
use Expect;
my $command = "perl -e 'use REST::Client; $tmp = REST::Client->getCredentials();print $tmp->{'username'};print \" \";print $tmp->{'password'};'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
my $value = $exp->expect(1);
但 $value
什么也没有,$exp->expect(1)
只是在 STDOUT 中打印值。
不确定这是否是最好的方法,但确实有效
use Expect;
my $command = "perl -e 'use REST::Client; $tmp = REST::Client->getCredentials();print $tmp->{'username'};print \" \";print $tmp->{'password'};'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
if ($exp->expect(undef,'-re','user 12345') == 1) {
print "matched\n";
}
我正在尝试在 Perl 中自动显示登录提示
我正在使用 SSHGetCredentials('login_prompt' => 1)
生成登录提示,这是 perl 的 Expect::SSH
库的一个功能
我的代码是这样的,这里 REST::Client->getCredentials()
内部调用 SSHGetCredentials('login_prompt' => 1)
会调用登录提示和 return 输入的用户 ID 和密码。
use Expect;
my $command = "perl -e 'use REST::Client; REST::Client->getCredentials()'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
现在想验证一下是不是我传的用户名或密码,所以想抓包比较
我怎样才能捕捉到它们?
我试过这个:
use Expect;
my $command = "perl -e 'use REST::Client; $tmp = REST::Client->getCredentials();print $tmp->{'username'};print \" \";print $tmp->{'password'};'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
my $value = $exp->expect(1);
但 $value
什么也没有,$exp->expect(1)
只是在 STDOUT 中打印值。
不确定这是否是最好的方法,但确实有效
use Expect;
my $command = "perl -e 'use REST::Client; $tmp = REST::Client->getCredentials();print $tmp->{'username'};print \" \";print $tmp->{'password'};'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
if ($exp->expect(undef,'-re','user 12345') == 1) {
print "matched\n";
}