Perl中一个关于Net::Telnet中的一问题

HF_SKY000 2010-04-09 02:11:51
加精
我现在在用perl做一个项目.在使用Perl登录对方服务器的时候,总是提示超时,我想着应该是提示符的问题,请高手们帮忙分析一下.
报错信息是:
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 #密码

到这里登录算是完成了,在登录的过程没有任何提示符的.如果你再相应的命令,服务器会吐出大量信息的.
请大家帮忙看一下,我上面的代码错在哪里?
...全文
2260 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
linge0921 2010-06-11
  • 打赏
  • 举报
回复
可以 可以 多学习
zhang2010_sen 2010-04-13
  • 打赏
  • 举报
回复
太高深了,我也得好好学习呀!
a5719756 2010-04-13
  • 打赏
  • 举报
回复
学学 不错
mfc28jacy 2010-04-12
  • 打赏
  • 举报
回复
顶楼主 希望多发技术贴
wangshun424 2010-04-12
  • 打赏
  • 举报
回复
捧剑者 2010-04-12
  • 打赏
  • 举报
回复
mark
ztsjygw1 2010-04-11
  • 打赏
  • 举报
回复
学习学习
ztsjygw1 2010-04-11
  • 打赏
  • 举报
回复
学习来了。
hellodota121 2010-04-10
  • 打赏
  • 举报
回复
学习来了。
wkk417301568 2010-04-10
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。
零度空间0520 2010-04-10
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。
donkeyjie 2010-04-10
  • 打赏
  • 举报
回复
学习学习
fibbery 2010-04-10
  • 打赏
  • 举报
回复
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();
HF_SKY000 2010-04-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);
程序不提示任何异常,但是没有任何输出。请高手们帮忙分析一下,多谢。
bestboy1 2010-04-09
  • 打赏
  • 举报
回复
学习来了。
soundforever 2010-04-09
  • 打赏
  • 举报
回复
好东东~~~
xuskyline 2010-04-09
  • 打赏
  • 举报
回复
我路过
fibbery 2010-04-09
  • 打赏
  • 举报
回复
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\
HF_SKY000 2010-04-09
  • 打赏
  • 举报
回复
谢谢你的回复,但是还没明白你说的意思?最后献上代码瞧一下.
fibbery 2010-04-09
  • 打赏
  • 举报
回复
你在设置了prompt后,在打开的时候,程序会一直等待命令行提示符,然而在此时并不会出现,因为你需要先输入用户名和密码,所以,提示你超时了。不要用这种方式,你可以使用等待一个通配符,然后就print回用户名,再print回密码。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧