Q : 問題:PASV及PORT各是什麼?我該用哪一個?

適用:FTP使用者/FTP站長

A : 大部分的FTP使用者都沒聽過PASV(被動)以及PORT指令,不過這並不是您的錯。首先您必須先了解每個FTP的Session都會用到兩個TCP的連結,連到FTP伺服器時用第一個,當您要作DIR LISTING或FILE TRANSFER的時候就會用到第二個,而問題中的兩個指令(PORT & PASV)只是在建立(或是說與伺服器協調)第二個連結所用的。

您或許會覺得奇怪,為什麼DATA連結要用兩種不同的指令,而不是只用一個就好了。這是個很好的問題,在早期,一個PORT指令就夠了,然而隨著大量的防火牆軟體以及NAT裝置的問世,PORT指令失去了他的功能,PASV指令於焉誕生,並被當作Firewall Friendly Data Transfer(與防火牆相容的資料傳輸)。

現在我們來談兩種指令的不同處:

PORT:FTP客戶端要求FTP伺服器連上客戶端的IP位址(包含連接埠)

PASV:FTP伺服器端要求FTP客戶端連上伺服器端的IP位址(包含連接埠)。

所以可以輕易的知道:

PORT指令會失敗:如果客戶端根本沒有辦法讓別人知道他的真正位址(當客戶位於NAT後方時)

PASV指令會失敗:如果伺服器端根本沒有辦法讓別人知道他的真正位址(當伺服器位於NAT後方時)

那我們又如何看到這些PORT/PASV指令以及其回應!?沒錯,找個能顯示狀態列的優秀的FTP客戶端軟體就對了:),例如FlashFXP、CuteFTP、Windows Commander以及其他類似的軟體都可以…,不過話說回來,也存在著某些將指令及其回應隱藏起來的客戶端軟體,使用這些軟體的話,您當然就看不到了。

現在你應該知道如果你遇到PORT與PASV相關的問題時該從何下手囉…

狀況一:

FTP客戶端無法做LIST DIR,並且顯示「PORT command failed error」,因為該指令是由客戶端所下的,所以如果跟指令一起顯示的客戶端的IP和連接埠看起來似乎位於NAT後方的話

Address Allocation for Private Internets

10.0.0.0 - 10.255.255.255 (10/8 prefix)

172.16.0.0 - 172.31.255.255 (172.16/12 prefix)

192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

這就屬於客戶端的問題了,您可試著協助FTP的使用者正確地設定客戶端軟體,並要求以PASV模式來取代PORT指令,因為該客戶端軟體無法自行辨識這個狀況以正常的運作。

狀況二:FTP客戶端可以連接到FTP伺服器,但無法做LIST DIR,並且顯示:「PASV failed,no one connects to IP:PORT」。此時您可以檢查一下這個IP及連接埠,像不像是在NAT後方的樣子?

Address Allocation for Private Internets

10.0.0.0 - 10.255.255.255 (10/8 prefix)

172.16.0.0 - 172.31.255.255 (172.16/12 prefix)

192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

這太扯了吧?PORT 192.168.0.X.A.B,而伺服器居然回報成功建立連結?
這是有可能的。
*很多伺服器會發生連結並未成功建立但卻回報連結已被建立,但雷電不會。
*有些位於FTP客戶端與伺服器之間的Transparent Proxy(例如Microsoft Windows XP internet connecting sharing)會在FTP客戶端毫不知情的情況下將PORT Private_IP 轉成合法的IP,不過這只有在FTP伺服器使用port 21的時候才有用。

如果的確如此,伺服器的站長就該調整一下設定,不應讓伺服器繼續使用內部的IP位址(見http://www.raidenftpd.com/en/raiden-ftpd-doc/howto-setup-ip.html)。如果IP及連接埠都沒問題,伺服器的IP也正常,那可能的答案就很多了,且絕大部分是無法立即找到問題癥結的,您不妨試試以下的步驟。

  1. 將您的FTP客戶端軟體升級至最新版或乾脆換一套試試,不可諱言的還是有設計不佳的客戶端軟體存在,在這裡不一一點出。如果您有用FXP的話,此時對方的FTP伺服器就是你的客戶端,也有不良的伺服器軟體自然不在話下。

  2. 如果您是FTP的使用者,檢查一下您是否有安裝會將第二個連結擋住的防火牆或安全防護軟體,如果有,請將其移除。

  3. 如果您是站長,檢查一下您是否有安裝會將第二個連結擋住的防火牆或安全防護軟體,如果有,請將其移除。

從此天下太平了嗎?抱歉答案要讓您失望了。除非您能有分身同時處於網路的伺服器與客戶端,否則永遠無法防止問題產生,理由再明白不過,您如何能知道客戶端或伺服器端的網路有裝防火牆?結論就是:「你無從得知!」

即使你能同時搞定伺服器端及客戶端的電腦,你又怎麼能料的到網管者或ISP有沒有為你的網路在匝道上裝防火牆?結論還是:「你無從得知!」

因此當你遇到上述的問題時,不妨用以上的幾個步驟來試著找出「可歸責於自己的原因」。雷電FTPD並沒有PASV/PORT方面的缺陷,且沒有人(包括您)能真正的針對此提出一勞永逸的解決之道,所以您只能靠自己來處理了。而您所需的相關背景知識可參考本頁。

That's ALL

 

Copyright © RaidenFTPD TEAM , ALL RIGHTS RESERVED

REVISION 2.2 , 2002/09/10