« FTPコマンド一覧 | メイン | 2進数 16進数 10進数 変換 »
2005年10月11日
FTP 通常モードとPASVモード
FTPの通常モードとPASVモードの違いについて
1、通常モード
サーバの21番ポートに制御用のコネクションを確立
このコネクションは切断するまで確立されたまま
(192.168.1.88 ポートランダム → サーバIP ポート21)
内容はこんな感じ
----------------------------------------------------------------------------------
USER user_ID
PASS password
CWD /hoge
XPWD
CWD /hoge/hoge
PORT 192,168,1,88,7,91
NLST -alL
TYPE A
PORT 192,168,1,88,7,92
RETR /hoge/1.txt
--------------------------------------------------------------------------------
この PORTの 後の数字の意味は次のようになっている。
192,168,1,88 → 192.168.1.88 ローカルIP
7,91 → それぞれ16 及び 2進数で
7 → 07 → 00000111
91 → 5B → 01011011
これをくっつけると
075B (2進数では 0000011101011011
)
これは =1883
この 1883にNLST -alL の結果を投げてくださいとのこと
これを受けてFTPサーバはサーバの20番ポートから一方的にこのポートにパケットを投げつける。
2、PASVモードの場合
サーバの21番ポートに制御用のコネクションを確立
このコネクションは切断するまで確立されたまま
(192.168.1.88 ポートランダム → サーバIP ポート21)
とここまでは、同じ しかし通信するポートを指定する主人公が異なる。
21番にローカルIPより通信する内容は以下のよう
-----------------------------------------------------------------------
USER hoge
PASS hogepass
XPWD
TYPE A
PASV
RETR /home/hoge/1.txt
-----------------------------------------------------------------------
通常は RETRのコマンド前にクライアント側がポートを指定してたが、PASVモードの場合はPASVコマンドだけです。
このコマンドに対して サーバより返答があります。 それは以下のよう
----------------------------------------------------------------------------
220 Pro Server
331 Password required for hoge
230 User hoge logged in.
257 "/hoge" is current directory.
200 Type set to A
227 Entering Passive Mode (202,226,240,210,15,0).
150 Opening ASCII mode data connection for /hoge/1.txt (596017 bytes)
226 Transfer complete.
---------------------------------------------------------------------------
227 Entering Passive Mode (202,226,240,210,15,0). にてサーバがこのポートに投げてください!と言ってます。
ポートは 15,0 ですので 0F00 = 3840
ということで、クライアントはこのポートに要求をだし、それに答えてそのポートに返事を(ファイルを)返す事になります。
要はどちらが主体になって相手をオープンするかです。
通常モードの時はサーバのデータポートはほとんど20番ですが、PASVモードの時のポートはクライアントもサーバもランダムです。これを判別するには21番ポートのやり取りを眺めた上で判断するしかなさそうです。。。。
投稿者 muuming : 2005年10月11日 14:42