2009/01/31
FTPデータ転送用ポートのポート番号の通知はモードの違いによって指示を出す側(クライアント or サーバ)が異なりますが、いずれの場合も以下のようなIPアドレスとポート番号の組み合わせになります。
PORTモード(アクティブモード)
クライアント → サーバ
PORT X,X,X,X,A,B
PASVモード(パッシブモード)
クライアント → サーバ
PASV
サーバ → クライアント
X,X,X,X,A,B
ポート番号の算出方法
最初のX,X,X,XはIPアドレスの4オクテット、次のA,Bはポート番号の第1/第2オクテットをそれぞれ10進数で表しています。
例えば以下のような場合、
PORT 192,168,0,100,210,251
まず192.168.0.100がIPアドレスです。
次に後ろの210と251を16進に直して連結し、それを10進に直したものがポート番号になるので54011となります。
% ruby -e 'printf("%x %x\n", 210, 251)' d2 fb % ruby -e 'printf("%d\n", "0xd2fb")' 54011
同じ理屈により、以下のようにしてもポート番号が計算できます。
% ruby -e 'puts 210 * 256 + 251' 54011