【发布时间】:2014-06-20 03:17:11
【问题描述】:
我用 perl 编写了下面的 FTP 客户端程序。在一台服务器上执行良好。如果我尝试在不同的服务器上执行相同的操作,我会收到 PASV 命令未实现错误。如果我在 FTP 构造函数中给出 Passive=>0,我将得到未实现的 ALLO 命令。您能否告诉我为什么会收到此错误以及如何解决此错误。
#!/usr/bin/perl -w
use strict; # Don't forget !
use Net::FTP;
my $host = "X.X.X.X";
my $user = "abc";
my $password = "xxx";
my $f = Net::FTP->new($host,Debug=>1) or die "Can't open $host $@\n";
$f->login($user, $password) or die "Can't log $user in\n", $f->message;
$f->binary();
$f->put("abc.txt"); # or die "unable to send the file",$f->message;
$f->quit or die "unbale to close the conenction";
--- 下面是输出:
Net::FTP>>> Net::FTP(2.79)
Net::FTP>>> Exporter(5.58)
Net::FTP>>> Net::Cmd(2.30)
Net::FTP>>> IO::Socket::INET(1.29)
Net::FTP>>> IO::Socket(1.29)
Net::FTP>>> IO::Handle(1.25)
Net::FTP=GLOB(0x99cabe8)<<< 220 X.X.X.X FTP server ready.
Net::FTP=GLOB(0x99cabe8)>>> USER abc
Net::FTP=GLOB(0x99cabe8)<<< 331 Password required for abc.
Net::FTP=GLOB(0x99cabe8)>>> PASS ....
Net::FTP=GLOB(0x99cabe8)<<< 230 User abc logged in.
Net::FTP=GLOB(0x99cabe8)>>> TYPE I
Net::FTP=GLOB(0x99cabe8)<<< 200 Type set to I.
Net::FTP=GLOB(0x99cabe8)>>> PORT X,X,X,X,221,251
Net::FTP=GLOB(0x99cabe8)<<< 200 PORT command successful.
Net::FTP=GLOB(0x99cabe8)>>> ALLO 1442
Net::FTP=GLOB(0x99cabe8)<<< 502 ALLO command not implemented.
Net::FTP=GLOB(0x86d9be8)>>> QUIT
Net::FTP=GLOB(0x86d9be8)<<< 221 Goodbye.
【问题讨论】:
-
您没有显示实际的错误消息,但我认为是没有实现 PASV 的 SERVER。
-
是的。服务器未实施 PASV。但是在这段代码中,如果我使用 Passive=>0 这将关闭 pasv 传输。在这种情况下,我收到“无法发送文件 ALLO 命令未找到”错误。有什么建议为什么会来吗?如何纠正这个错误?
-
$f->put("abc.txt") 这对我来说返回 false!在 ALLO 之后它没有发送 STOR 命令
标签: perl