使用Perl :: FTP时,我应该在主机字段中放置什么来连接到网络上连接的本地计算机

时间:2012-02-01 08:55:12

标签: perl ftp

我在perl中使用Net :: FTP来进行一些文件传输。当我运行以下代码时: -

使用IP地址有任何问题吗?我是否正确在主机领域提供此服务?

use strict;          
use Net::FTP;

my $host = "10.77.69.124";
my $user = "administrator";
my $password = "Password";

my $f = Net::FTP->new($host, Debug =>0) or die "Can't open $host\n";
$f->login($user, $password) or die "Can't log  $user in\n";

代码无法连接到远程主机。为什么会这样?这不应该与$host

中提供的IP地址一起使用

2 个答案:

答案 0 :(得分:5)

Net :: FTP的构造函数允许您传递单个标量值或要尝试的主机数组。此字段的值应与IO::Socket::INET中的PeerAddr相同(主机名或ip 地址)。

通过指定Debug仔细查看发生的情况。如果您位于防火墙或NAT设置之后,您可能还应将 Passive 设置为非零值,并确保通过打印$ @来检查构造函数是否失败。

my $ftp = Net::FTP->new(Host=>$host, Debug=>1, Passive=>1) || die $@;

如果构造函数成功,您可能想要检查是否有任何其他方法失败:

$ftp->login($user, $pass) || die $ftp->message;
$ftp->cwd($path) || die $ftp->message;

顺便说一句:如果您不确定是否使用了正确的主机参数,可以向Net :: FTP询问它尝试连接的主机:

print $ftp->host, "\n";

如果仍然无效,请提供您的申请的详细输出。

希望这有帮助。

答案 1 :(得分:3)

首先确保您可以到达远程端:

从命令行使用telnet(在linux和windows上也可用,语法不同)

telnet host 21

如果您无法连接命令行,请检查防火墙规则或您的FTP服务器是否在不同的端口上运行?

如果您能够使用普通FTP命令连接尝试登录:

USER user@remote.host
PASS yourpassword

这将使用与远程的ACTIVE ftp连接。这是旧的方式。

现在大多数ftp服务器都使用PASSIVE ftp。测试尝试此命令(来自linux命令行)

ftp -v -p host

在perl中你可以这样使用被动模式:

my $f = Net::FTP->new($host, Debug =>1, Passive => 1) or die "Can't open $host\n";

我希望这会对你有所帮助。