为什么我的Net :: Telnet程序超时?

时间:2010-03-30 07:05:47

标签: perl timeout telnet

我写了一些小代码,使用Perl连接到远程服务器但是观察错误消息

#!/usr/bin/perl -w

use Net::Telnet;

$telnet = new Net::Telnet ( Timeout=>60, Errmode=>'die');

$telnet->open('192.168.50.40');

$telnet->waitfor('/login:/');

$telnet->print('queen');

$telnet->waitfor('/password:/');

$telnet->print('kinG!');

$telnet->waitfor('/:/');

$telnet->print('vol >> C:\result.txt');

$telnet->waitfor('/:/');

$telnet->cmd("mkdir vol");

$telnet->print('mkdir vol234');

$telnet->cmd("mkdir vol1");

$telnet->waitfor('/\$ $/i'); 

$telnet->print('whoamI');

print $output;

但是在跑步时我遇到了以下错误

C:\>perl -c E:\test\net.pl

E:\test\net.pl syntax OK

C:\>perl E:\test\net.pl

command timed-out at E:\test\net.pl line 13

C:\>

在这方面帮助我。我是Perl的新手。

2 个答案:

答案 0 :(得分:1)

我不确定Net :: Telnet,但使用'/:/'(带引号)我猜是问题所在。即/:/(在斜杠内) - 这是正则表达式,但引号只是字符串应出现在终端上(即它等待字符串'/:/' - 斜杠,两个点,斜杠)。

要调试此类程序(如果Net :: Telnet不与远程系统进行交互),您可以简单地将:print“我等待登录... \ n”在waitfor()

答案 1 :(得分:0)

为什么不使用Net::Telnetlogin方法登录?当你处于如此低的水平时,你必须自己处理所有细节。如果你查看该方法的源代码,你会发现它做了很多工作,包括解决Linux上的登录错误的问题。