« 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

コメント

コメントしてください




保存しますか?