仔細考慮這個對話過程我們會發現一些有趣的事情。我們可以看到當 PORT 命令被提交時,它指定了用戶端(192.168.150.80)上的一個連接埠而不是伺服器的。當我們用被動FTP時我們會看到相反的現象。我們再來關注 PORT命令的格式。就象你在下面的例子看到的一樣,它是一個由六個被逗號隔開的數字組成的序列。前四個表示IP地址,後兩個組成了用於資料連線的連接埠號碼。用第五個數乘以256再加上第六個數就得到了實際的連接埠號碼。下面例子中連接埠號碼就是( (14*256) + 178) = 3762。我們可以用netstat來驗證這個連接埠資訊。
testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2
Connected to testbox2.slacksite.com.
220 testbox2.slacksite.com FTP server ready.
Name (testbox2:slacker): slacker
---> USER slacker
331 Password required for slacker.
Password: TmpPass
---> PASS XXXX
230 User slacker logged in.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PORT 192,168,150,80,14,178
200 PORT command successful.
---> LIST
150 Opening ASCII mode data connection for file list.
drwx------ 3 slacker users 104 Jul 27 01:45 public_html
226 Transfer complete.
ftp> quit
---> QUIT
221 Goodbye.