Perl Net :: FTP包PASV命令未实现

用户名

我在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.
斯蒂芬·乌尔里希(Steffen Ullrich)

我收到未实现的PASV命令错误

在这种情况下,服务器未实现PASV,因此您不能使用被动模式,例如,必须将传输模式设置为主动模式才能传输数据。

我收到未实现的ALLO命令

服务器也未实现,但是在这种情况下,您可以放心地忽略此错误。ALLO仅用于为文件传输保留足够的空间,许多服务器未实现此目的。以下文件传输应该仍然有效。

编辑:使用Net :: FTP 2.79,将不再忽略ALLO的返回码,但会导致失败,并且无法完成传输。这意味着,未正确实现RFC959(FTP)的服务器将停止工作,因为根据该RFC,不需要使用ALLO预先分配存储空间的服务器应使此命令的行为与NOOP相同,例如返回成功。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章