プログラムファイアウォール越えをする時の、PerlのFTPモジュールの使い方ジャンル:パソコントップPerlでFTPプログラムを作る際、パッシブモードが原因で、うまくプログラムが動かない方必見です。root権限でrsyncの利用により、サーバ間でファイルを移動し、ファイルのバックアップを行っていたが、sshのrootログインが禁止になったので、FTPでファイルを移動するプログラムに書き換えて欲しいという依頼がありました。Perlには、FTPモジュールという便利なモジュールがあり、簡単にFTPアクセスを行うプログラムを書くことができます。STDERR;として、アイ・コンピュータサービスから、プログラムを実行したところ、うまくファイルをGETすることができました。ところが、お客様の環境でプログラムを実行すると、うまくファイルをGETすることができません。SonicWALLが入っているのが原因で、passiveモードでしか、FTPのやり取りができないのです。FTPモジュールには、pasv()メソッドがあり、『$ftp->pasv()』をプログラムに追加したところ、一応プログラムはまわるようになりましたが、ファイルGETの箇所でエラーが発生します。悩んだあげく、Passiveコンストラクタを使用したところ、うまくファイルをGETすることができました。Passiveコンストラクタは、0以外の値を設定すると、全てのデータ転送はパッシブモードを使って行われるとのことなので、1を設定してみました。以下は、PASVモードでFTP接続する時のプログラムのサンプルです。1』を、3行目に付け加えます。host.\n");pasv()メソッドの使い方をよく調べていないのですが、悩む前に、Passiveコンストラクタを利用した方が、手っ取り早いです。