Net :: Telnet等待不按预期工作

时间:2014-06-25 10:38:36

标签: perl

我正在使用Net::Telnet登录网络设备。

我的提示设置如下:

$telnetConsole = new Net::Telnet(
    Timeout => 5,
    Errmode => 'die',
    Prompt  => '/.*(\%|\>|\#|no\)) $/',
);

当我在网络设备的控制台端口上执行以下命令时:

$telnetConsole->print('request virtual-chassis renumber member-id 0 new-member-id 4');
($prematch, $match) = $telnetConsole->waitfor(Match => 'no', Errmode=>'return', Timeout => 4);

它给出了以下结果:

root@switch> request virtual-chassis renumber member-id 0 new-member-id 4 

To move configuration specific to member ID 0 to member ID 4, please
use the replace command. e.g. replace pattern ge-0/ with ge-4/

Do you want to continue ? [yes,no] (no) 

{master:0}
root@switch>

如您所见,我收到提示root@switch>,但无法回答子问题[yes, or no]。我想知道为什么Net :: Telnet不会停在Do you want to....行,所以我可以输入yes或no。看起来我得到一个额外的回车,这导致回答“否”并返回提示。我也尝试过“put”和单独的put语句“\ n”(回车),但没有运气。

1 个答案:

答案 0 :(得分:1)

我与Net :: Telnet和Net :: SSH2进行了斗争,因为他们正在编写脚本来与网络设备通信。我最终切换到Control :: CLI来实现它。在Control :: CLI中,这个(未经测试的)代码应该可以工作(或者接近它):

$telnetConsoleOutput = $telnetConsole->cmd("request virtual-chassis renumber member-id 0 new-member-id 4");
$telnetConsoleOutput = $telnetConsole->cmd("yes");

请注意,没有"等待"在那里? Control :: CLI将通过" cmd"为您处理。功能,至少是我的经验。 Control :: CLI是一个非常好的小包装器,通过telnet,ssh和串行电缆连接。我用它来与Linux服务器和网络设备(SSH和串口)进行交互。它可以为你处理很多东西而你甚至不知道它,并且有信心它可以解决你的问题,只需要很少的返工。

HTH! TheJester1977