我正在尝试解决以下问题:使用 Netcat 连接到给定的 IP 地址和端口号。在“输入密码:”提示时输入密码。然后远程机器回显 2 行文本(1 行随机)。我的任务是在超时之前将这些消息发送回主机并终止。
似乎我应该能够使用一个简单的脚本来执行此操作,该脚本从命令行(本地)读取并将这些行的数据发送回远程机器。我尝试过一个看起来像这样的 perl 脚本:
#!/bin/perl -w;
use strict;
use warnings;
my $PASSWORD = "password";
my $timeout = 20;
my $timenow = time;
while (time - $timenow < $timeout) {
while (my $input = <STDIN> ) {
if ($input =~ "password") {
print $PASSWORD . "\n";
} else {
print $input;
}
}
}
然后运行:
nc <address> <port> | ./perlscript.pl
这可以将密码打印到我的终端,但随后失败。经过一番摸索后,似乎密码实际上并没有被发送到远程机器:
echo "PASSWORD" | nc <address> <port> | ./perlscript.pl
让我通过密码提示,打印出远程机器发送的消息,但似乎它们实际上并没有被发回。
有谁知道我如何实现这个目标?似乎使用某种 mknode 管道可能有助于将 I/O 重放回远程机器,但不知道该怎么做?
这种方法也可能存在根本缺陷,因此对如何解决此问题的任何其他建议持开放态度?
谢谢,
马特