首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Net::FTP包PASV命令未实现

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

Stack Overflow用户
提问于 2014-06-19 04:01:41
回答 2查看 925关注 0票数 1

我用perl编写了下面的FTP客户端程序。在一台服务器上执行得很好。如果我试图在不同的服务器上执行相同的命令,我将得到PASV命令,而不是实现错误。如果我在FTP构造函数中给出Passive=>0,就会得到ALLO没有实现。请告诉我为什么会有这个错误,以及如何解决这个错误。

代码语言:javascript
复制
#!/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";

-以下是产出:

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-19 04:37:35

我得到PASV命令没有实现错误

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

我让ALLO命令没有得到执行

也不是由服务器实现的,但在这种情况下,您可以安全地忽略此错误。ALLO只是用来为文件的传输预留足够的空间,而很多服务器并没有实现这一点。下面的文件传输应该仍然有效。

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

票数 1
EN

Stack Overflow用户

发布于 2014-06-19 04:07:21

根据perldoc,pasv_xfer命令将激活被动模式。来自那一页

pasv_xfer ( SRC_FILE,DEST_SERVER,DEST_FILE )这种方法将在两个远程ftp服务器之间进行文件传输。如果省略"DEST_FILE“,则使用"SRC_FILE”的叶名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24298558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档