2012-02-01 3 views
0

私はいくつかのファイル転送を行うためにperlでNet :: FTPを使用しています。次のコードを実行すると: -Perl :: 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アドレスでは動作しませんか?あなたができない場合は

telnet host 21 

(構文で異なること、あまりにもLinuxとWindowsで利用可能)コマンドライン使用のtelnetから

+3

あなたは 'Debug => 1'になぜ失敗したのかを知ることができます – ccheneson

+1

そのホストから、そのIPアドレスを使用している"通常の "ftpクライアントに接続できますか? – Mat

+0

@mat私はいくつかのテストを行うことができる任意の通常のクライアントを提案できますか? – Chani

答えて

5

Net :: FTPのコンストラクタでは、単一のスカラー値またはホストの配列を渡すことができます。このフィールドの値は、IO::Socket::INETホスト名またはip アドレス)のPeerAddrと同じである必要があります。

Debugを指定すると、何が起こっているのかを詳しく見てください。ファイアウォールやNAT設定の背後にいる場合は、おそらく受動を0以外の値に設定し、$ @を出力してコンストラクタが失敗したかどうかを確認してください。

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

コンストラクタが成功した場合は、他の方法のいずれかが失敗かどうかを確認することがあります:

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

ところで:あなたは正しいホストパラメータを使用していたかどうかが不明な場合は、 Net :: FTPに接続しようとしたホストに問い合わせることができます:

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

これでも動作しない場合は、アプリケーションの詳細な出力を提供してください。

これが役に立ちます。

3

まずあなたがリモート側に達することができることを確認してくださいコマンドラインから接続するには、ファイアウォールルールか、別のポートで動作しているFTPサーバーをチェックしますか?

あなたは、プレーンFTPコマンドでログインを試して接続できる場合:

USER [email protected] 
PASS yourpassword 

これは、リモートにアクティブなFTP接続を使用します。これは古い方法です。

今日、ほとんどのftpサーバーはパッシブFTPを使用しています。

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

私は、これはあなたを助けることを願っています:Perlで(Linuxのコマンドラインから)このコマンドを試してみる

ftp -v -p host 

をテストするには、パッシブモードをこの方法を使用することができます。

+0

$ホストは何ですか? IPアドレス? – Chani

+0

IPアドレスまたはIPアドレスに解決される名前/アドレスのいずれか。あなたがpingしてIPを得ることができるなら、それはうまくいくはずです –

+0

@ØyvindSkaarそれはありません。私はプレーンなpingで接続しようとしましたが、perlコードを通してftp接続がタイムアウトになっています。 – Chani

関連する問題