WindowsのFTPクライアントはPASVモードに対応していない。
概要
Windows標準のFTPクライアントはPASVモードに対応していない。
ACTIVEモードでは標準(20,21)以外のポートに接続することは現実的じゃない(NAT問題)。
Windows標準のFTPクライアントをターゲットにする場合、
FTPサーバは標準ポートかつACTIVEモードのものを用意しないとならない。
これを知らずにハマった。
挙動
まずは接続
c:\work>ftp ftp> open XXXXXXXX XXXXXXXX に接続しました。 220 (vsFTPd 2.2.2) ユーザー (XXXXXXXX:(none)): pen 331 Please specify the password. パスワード: 230 Login successful. ftp> debug デバッグ オン。
ACTIVEモードで動作している(PORTコマンド)
ftp> ls ---> PORT 192,168,1,67,237,68 200 PORT command successful. Consider using PASV. ---> NLST 150 Here comes the directory listing. arc bin build etc hoge lib local penchan.mp4 project share univac.webm var work 226 Directory send OK. ftp: 93 バイトが受信されました 0.02秒 4.23KB/秒。 ftp> put cronkick ---> PORT 192,168,1,67,237,70 200 PORT command successful. Consider using PASV. ---> STOR cronkick 150 Ok to send data. 226 Transfer complete. ftp: 9 バイトが送信されました 0.00秒 9000.00KB/秒。
PASVモードをサポートしていないので、切り替えるコマンドが存在しない。
ダイレクトにFTPプロトコルを送信してみる。
サーバ側からPASVの利用ポートが送られてくるが、クライアントが対応しておらず、
結局PORTが送られる。
ftp> quote pasv ---> pasv 227 Entering Passive Mode (153,121,43,251,209,181). ftp> ls ---> PORT 192,168,1,67,237,71 200 PORT command successful. Consider using PASV. ---> NLST 150 Here comes the directory listing. arc bin build cronkick etc hoge lib local penchan.mp4 project share univac.webm var work 226 Directory send OK. ftp: 103 バイトが受信されました 0.03秒 3.12KB/秒。 ftp> put cronkick ---> PORT 192,168,1,67,237,74 200 PORT command successful. Consider using PASV. ---> STOR cronkick 150 Ok to send data. 226 Transfer complete. ftp: 9 バイトが送信されました 0.00秒 9000.00KB/秒。 ftp>
ちょっとへぼすぎるよね。