报错信息是:
timed-out waiting for login prompt at get_file.pl line 32
my $telnet =new Net::Telnet(Timeout =>60,
Prompt =>'/^\s+$/',
Port =>8000);
$telnet->open($ip);
$telnet->login($user_name,$password);
print "Telnet Successfully!\n" if(defined $telnet);
手功登录方式是:
HBapp2% telnet xxx.x.xxx.x 8000 #ip用xxx.x.xxx.x代替
Trying xxx.x.xxx.x...
Connected to xxx.x.xxx.x.
Escape character is '^]'.
guest #用户名
123456 #密码
到这里登录算是完成了,在登录的过程没有任何提示符的.如果你再相应的命令,服务器会吐出大量信息的.
请大家帮忙看一下,我上面的代码错在哪里?
21 个解决方案
#1
你在设置了prompt后,在打开的时候,程序会一直等待命令行提示符,然而在此时并不会出现,因为你需要先输入用户名和密码,所以,提示你超时了。不要用这种方式,你可以使用等待一个通配符,然后就print回用户名,再print回密码。
#2
谢谢你的回复,但是还没明白你说的意思?最后献上代码瞧一下.
#3
use strict;
use warnings;
use Net::Telnet;
my $tnet=new Net::Telnet('Host'=>'127.0.0.1','Timeout'=>3,'Dump_Log'=>'test.log');
$tnet->waitfor('Match'=>"/login:/");#适当的时候……
$tnet->print("fibbery"); #输入适当的内容
$tnet->waitfor('Match'=>"/password:/");#适当的时候……
$tnet->print("mypassword"); #输入适当的内容
$tnet->waitfor('/\>/');#等待命令行提示符
my @lines=$tnet->cmd('String'=>"dir",'Prompt'=>'/fibbery\>/');#执行命令
$tnet->print("exit");
$tnet->close();
print("@lines\n");
D:\temp\Perl>perl test.pl
驱动器 C 中的卷没有标签。
卷的序列号是 2C08-EFB1
C:\Documents and Settings\fibbery 的目录
2010-03-26 21:46 <DIR> .
2010-03-26 21:46 <DIR> ..
2010-03-03 21:32 <DIR> CMB
2010-03-26 21:46 <DIR> Favorites
2010-03-26 19:25 <DIR> My Documents
2010-03-28 23:05 <DIR> Tracing
2009-12-14 22:46 <DIR> 「开始」菜单
2010-04-05 13:15 <DIR> 桌面
0 个文件 0 字节
8 个目录 6,396,502,016 可用字节
C:\Documents and Settings\
#4
我路过
#5
好东东~~~
#6
学习来了。
#7
学习。。。。。。。。。。。
#8
学习。。。。。。。。。。。
#9
学习来了。
#10
通过修改代码,登录服务已成功,但是发送命令时却仍会抛出超时异常。修改后的代码是:
my $t =new Net::Telnet(
Timeout =>10,
Port =>8000,
Dumper_Log =>"dumper_log.log",
Input_Log =>"input_log.log",
Output_Log =>"output_log.log"
);
$t->open($ip);
$t->print($user_name);
$t->print($password);
print "Login Server Successfully!\n" if(defined $t);
my @data =$t->cmd(String =>"$command1");
print "@data\n";
运行结果:
##############################
Login Server Successfully!
command timed-out at send_command.pl line 41
不过在产生的日志文件:input_log.log文件中却有命令结果。
请问:既然日志文件中有了命令结果,那就说明命令已经执行成功了,为什么还提示超时异常?
还有:我通过$t->print($command1);
程序不提示任何异常,但是没有任何输出。请高手们帮忙分析一下,多谢。
my $t =new Net::Telnet(
Timeout =>10,
Port =>8000,
Dumper_Log =>"dumper_log.log",
Input_Log =>"input_log.log",
Output_Log =>"output_log.log"
);
$t->open($ip);
$t->print($user_name);
$t->print($password);
print "Login Server Successfully!\n" if(defined $t);
my @data =$t->cmd(String =>"$command1");
print "@data\n";
运行结果:
##############################
Login Server Successfully!
command timed-out at send_command.pl line 41
不过在产生的日志文件:input_log.log文件中却有命令结果。
请问:既然日志文件中有了命令结果,那就说明命令已经执行成功了,为什么还提示超时异常?
还有:我通过$t->print($command1);
程序不提示任何异常,但是没有任何输出。请高手们帮忙分析一下,多谢。
#11
use strict;
use warnings;
use Net::Telnet;
my $tnet=new Net::Telnet('Host'=>'127.0.0.1','Timeout'=>3,'Dump_Log'=>'test.log');
$tnet->waitfor('Match'=>"/login:/");
$tnet->print("fibbery");
$tnet->waitfor('Match'=>"/password:/");
$tnet->print("password");
$tnet->waitfor('/\>/');
$tnet->print("dir");
$tnet->errmode("return");
while(my $data=$tnet->get('Timeout'=>9999999))#设置一个合适的超时,不至于使程序没运行结束而终止等待
{
print($data);
if($data=~/fibbery\>/)#此处判断何时程序运行结束
{
last;
}
}
$tnet->print("exit");
$tnet->close();
#12
学习学习
#13
学习来了。
#14
学习学习
#15
mark
#16
#17
顶楼主 希望多发技术贴
#18
学学 不错
#19
太高深了,我也得好好学习呀!
#20
#21
可以 可以 多学习
#1
你在设置了prompt后,在打开的时候,程序会一直等待命令行提示符,然而在此时并不会出现,因为你需要先输入用户名和密码,所以,提示你超时了。不要用这种方式,你可以使用等待一个通配符,然后就print回用户名,再print回密码。
#2
谢谢你的回复,但是还没明白你说的意思?最后献上代码瞧一下.
#3
use strict;
use warnings;
use Net::Telnet;
my $tnet=new Net::Telnet('Host'=>'127.0.0.1','Timeout'=>3,'Dump_Log'=>'test.log');
$tnet->waitfor('Match'=>"/login:/");#适当的时候……
$tnet->print("fibbery"); #输入适当的内容
$tnet->waitfor('Match'=>"/password:/");#适当的时候……
$tnet->print("mypassword"); #输入适当的内容
$tnet->waitfor('/\>/');#等待命令行提示符
my @lines=$tnet->cmd('String'=>"dir",'Prompt'=>'/fibbery\>/');#执行命令
$tnet->print("exit");
$tnet->close();
print("@lines\n");
D:\temp\Perl>perl test.pl
驱动器 C 中的卷没有标签。
卷的序列号是 2C08-EFB1
C:\Documents and Settings\fibbery 的目录
2010-03-26 21:46 <DIR> .
2010-03-26 21:46 <DIR> ..
2010-03-03 21:32 <DIR> CMB
2010-03-26 21:46 <DIR> Favorites
2010-03-26 19:25 <DIR> My Documents
2010-03-28 23:05 <DIR> Tracing
2009-12-14 22:46 <DIR> 「开始」菜单
2010-04-05 13:15 <DIR> 桌面
0 个文件 0 字节
8 个目录 6,396,502,016 可用字节
C:\Documents and Settings\
#4
我路过
#5
好东东~~~
#6
学习来了。
#7
学习。。。。。。。。。。。
#8
学习。。。。。。。。。。。
#9
学习来了。
#10
通过修改代码,登录服务已成功,但是发送命令时却仍会抛出超时异常。修改后的代码是:
my $t =new Net::Telnet(
Timeout =>10,
Port =>8000,
Dumper_Log =>"dumper_log.log",
Input_Log =>"input_log.log",
Output_Log =>"output_log.log"
);
$t->open($ip);
$t->print($user_name);
$t->print($password);
print "Login Server Successfully!\n" if(defined $t);
my @data =$t->cmd(String =>"$command1");
print "@data\n";
运行结果:
##############################
Login Server Successfully!
command timed-out at send_command.pl line 41
不过在产生的日志文件:input_log.log文件中却有命令结果。
请问:既然日志文件中有了命令结果,那就说明命令已经执行成功了,为什么还提示超时异常?
还有:我通过$t->print($command1);
程序不提示任何异常,但是没有任何输出。请高手们帮忙分析一下,多谢。
my $t =new Net::Telnet(
Timeout =>10,
Port =>8000,
Dumper_Log =>"dumper_log.log",
Input_Log =>"input_log.log",
Output_Log =>"output_log.log"
);
$t->open($ip);
$t->print($user_name);
$t->print($password);
print "Login Server Successfully!\n" if(defined $t);
my @data =$t->cmd(String =>"$command1");
print "@data\n";
运行结果:
##############################
Login Server Successfully!
command timed-out at send_command.pl line 41
不过在产生的日志文件:input_log.log文件中却有命令结果。
请问:既然日志文件中有了命令结果,那就说明命令已经执行成功了,为什么还提示超时异常?
还有:我通过$t->print($command1);
程序不提示任何异常,但是没有任何输出。请高手们帮忙分析一下,多谢。
#11
use strict;
use warnings;
use Net::Telnet;
my $tnet=new Net::Telnet('Host'=>'127.0.0.1','Timeout'=>3,'Dump_Log'=>'test.log');
$tnet->waitfor('Match'=>"/login:/");
$tnet->print("fibbery");
$tnet->waitfor('Match'=>"/password:/");
$tnet->print("password");
$tnet->waitfor('/\>/');
$tnet->print("dir");
$tnet->errmode("return");
while(my $data=$tnet->get('Timeout'=>9999999))#设置一个合适的超时,不至于使程序没运行结束而终止等待
{
print($data);
if($data=~/fibbery\>/)#此处判断何时程序运行结束
{
last;
}
}
$tnet->print("exit");
$tnet->close();
#12
学习学习
#13
学习来了。
#14
学习学习
#15
mark
#16
#17
顶楼主 希望多发技术贴
#18
学学 不错
#19
太高深了,我也得好好学习呀!
#20
#21
可以 可以 多学习