はじめまして。 68user様のPerlでFTPクライアントを作るページを参考にさせていただき、 FTP転送するプログラムを書いたりしています。 その中でFTPコマンドの NLST のレスポンスで 550 が返ってくるかどうかで ファイル存在チェックなどしたりしているのですが、 最近、OSをLinuxのRedHat7JからRedHat9へ変えた所、 FTPサーバが vsftpd-1.1.3-8 になり、NLST の結果が 5 で始まらない結果しか 返って来なくなりました。 Windows2k付属ftpのデバッグモードでサーバレスポンスを見ると次のような感じです。 ftp> ls aaa ---> PORT ###,###,###,###,###,### 200 PORT command successful. Consider using PASV. ---> NLST aaa 150 Here comes the directory listing. 226 Directory send OK. ftp> ※aaaは適当な存在しない適当なファイル名です。 これを見る限り vsftp サーバ側の反応が前と異なるということですよね。 この為ファイルの存在チェックができなくなってしまいました。 私の思いつく対策としては、 1.レスポンスコード(550)で判別ではなく、データポートに入ってくる値で存在チェックに変える。 2.NLST でなく quot SIZE や quot MDTM で判定(この場合 * ワイルドカードが使えなくなります) 3.vsftp のソースから変えてコンパイルする。 (該当個所がみつかるかどうか、変えて他に影響がないかどうかが問題です) 4.wuftp に戻す。 やっぱりワイルドカードは使いたいので4が一番手っ取り早いでしょうか。 サーバ側のconfファイルの設定などで前のNLSTのレスポンスに戻せたら一番いいのですが、 マニュアルを見た感じでは無理そうですし(英語は苦手なので間違いがあるかもしれませんが) サーバのレスポンスが変わってしまった理由や本来はどうあるべきなのかなど なんでもいいですので、この件についてご意見をお聞かせ願いたいと思います。 よろしくお願いします。 |