将参数传递给持久 telnet 会话

将参数传递给持久 telnet 会话

我有一个 whois 服务,它允许我远程登录到它并保持 telnet 连接打开,没有任何时间限制。我必须通过该 telnet 会话执行数千次 whois。例如,要对某个域进行 whois,我

echo "mydomain.com"; sleep 5| telnet whoismyserver.com 3454

我无法对数千个 whois 运行此命令。那么,有什么方法可以保持 telnet 会话打开并向其传递参数吗?

我想保持持久的 telnet 连接。并将参数传递给它。这可能吗?例如,在上面的命令中,我只能传递一次“echo domain”的参数,但我想传递一长串的 Echos,但间隔不同,而且也只打开持久的 telnet 会话。我想在不同的时间将所有命令逐一传递给一个 telnet 会话

答案1

为什么不能只在本地机器上运行 whois 并编写脚本/批处理?或者只是远程登录到另一个系统并在那里编写脚本?必须通过远程登录到另一个系统来执行此操作似乎很糟糕。

话虽如此,Expect 的用途是什么 (@larsks 的观点),因此,如果您必须这样做,请使用它。

/编辑 - 我们不是您的 Google,但这是一个开始:http://expect.sourceforge.net/

答案2

您可以使用命名管道(fifo)来执行此操作

mkfifo my.pipe
cat >my.pipe &
cat my.fifo | telnet telnet whois.iana.org  43
echo "serverfault.com" >>my.fifo

这似乎有效,因为 echo 命令会将 serverfault.com 发送到 whois 服务器。我无法访问允许持久连接的服务器,因此无法测试多个名称。但读取您的域名并将其回显到管道应该是明智之举。

如果你想将输出收集到文件中,那么只需重定向 stdout

cat my.fifo | telnet telnet whois.iana.org  43 >some.output.file

答案3

在 CPAN 档案中搜索 Perl 模块NET::Telnet并检查示例。

use Net::Telnet ();
$t = new Net::Telnet (Timeout => 10,
                      Prompt => '/bash\$ $/');
$t->open($host);
$t->login($username, $passwd);
@lines = $t->cmd("who");
print @lines;

相关内容