连接ftp时出现Entering Passive Mode是怎么回事解决办法
連接ftp時出現(xiàn)Entering Passive Mode是怎么回事解決辦法
處理防火墻和其他網(wǎng)絡(luò)連接問題時最常見的一個難題是主動 FTP 與被動 FTP 的區(qū)別以及如何完美地支持它們。幸運(yùn)地是,本文能夠幫助你清除在防火墻環(huán)境中如何支持 FTP 這個問題上的一些混亂。
本文也許不像題目聲稱的那樣是一個權(quán)威解釋,但我已經(jīng)聽到了很多好的反饋意見,也看到了本文在許多地方被引用,知道了很多人都認(rèn)為它很有用。雖然我一直在找尋改進(jìn)的方法,但如果你發(fā)現(xiàn)某個地方講的不夠清楚,需要更多的解釋,請告訴我!最近的修改是增加了主動 FTP 和被動 FTP 會話中命令的例子 。這些會話的例子應(yīng)該對更好地理解問題有所幫助 。例子中還提供了非常棒的圖例來解釋 FTP 會話過程的步驟 。現(xiàn)在,正題開始了 ...
基礎(chǔ)
FTP 是僅基于 TCP 的服務(wù),不支持 UDP 。與眾不同的是 FTP 使用 2 個端口,一個數(shù)據(jù)端口和一個命令端口(也可叫做控制端口) 。通常來說這兩個端口是 21 -命令端口和 20 -數(shù)據(jù)端口 。但當(dāng)我們發(fā)現(xiàn)根據(jù)( FTP 工作)方式的不同數(shù)據(jù)端口并不總是 20 時,混亂產(chǎn)生了 。
主動 FTP
主動方式的 FTP 是這樣的:客戶端從一個任意的非特權(quán)端口 N ( N>1024 )連接到 FTP 服務(wù)器的命令端口,也就是 21 端口 。然后客戶端開始監(jiān)聽端口 N+1 ,并發(fā)送 FTP 命令 “port N+1” 到 FTP 服務(wù)器。接著 服務(wù)器會從它自己的數(shù)據(jù)端口( 20 )連接到客戶端指定的數(shù)據(jù)端口( N+1 ) 。
針對 FTP 服務(wù)器前面的防火墻來說,必須允許以下通訊才能支持主動方式 FTP :
任何端口到 FTP 服務(wù)器的 21 端口 (客戶端初始化的連接 S<-C )
FTP 服務(wù)器的 21 端口到大于 1024 的端口( 服務(wù)器響應(yīng)客戶端的控制端口 S->C )
FTP 服務(wù)器的 20 端口到大于 1024 的端口( 服務(wù)器端初始化數(shù)據(jù)連接到客戶端的數(shù)據(jù)端口 S->C )
大于 1024 端口到 FTP 服務(wù)器的 20 端口(客戶端發(fā)送 ACK 響應(yīng)到 服務(wù)器的數(shù)據(jù)端口 S<-C )
畫出來的話,連接過程大概是下圖的樣子:
在第 1 步中,客戶端的命令端口與 FTP 服務(wù)器的命令端口建立連接,并發(fā)送命令 “PORT 1027” 。然后在第 2 步中, FTP 服務(wù)器給客戶端的命令端口返回一個 "ACK" 。在第 3 步中, FTP 服務(wù)器發(fā)起一個從它自己的數(shù)據(jù)端口( 20 )到客戶端先前指定的數(shù)據(jù)端口( 1027 )的連接,最后客戶端在第 4 步中給 服務(wù)器端返回一個 "ACK" 。
主動方式 FTP 的主要問題實(shí)際上在于客戶端 。FTP 的客戶端并沒有實(shí)際建立一個到 服務(wù)器數(shù)據(jù)端口的連接,它只是簡單的告訴 服務(wù)器自己監(jiān)聽的端口號, 服務(wù)器再回來連接客戶端這個指定的端口 。對于客戶端的防火墻來說,這是從外部系統(tǒng)建立到內(nèi)部客戶端的連接,這是通常會被阻塞的 。
主動 FTP 的例子
下面是一個主動 FTP 會話的實(shí)際例子 。當(dāng)然 服務(wù)器名、 IP 地址和用戶名都做了改動 。在這個例子中, FTP 會話從 testbox1.slacksite.com (192.168.150.80) ,一個運(yùn)行標(biāo)準(zhǔn)的 FTP 命令行客戶端的 Linux 工作站,發(fā)起到 testbox2.slacksite.com (192.168.150.90) ,一個運(yùn)行 ProFTPd 1.2.2RC2 的 Linux 工作站 。debugging ( -d )選項(xiàng)用來在 FTP 客戶端顯示連接的詳細(xì)過程 。紅色的文字是 debugging 信息,顯示的是發(fā)送到 服務(wù)器的實(shí)際 FTP 命令和所產(chǎn)生的回應(yīng)信息 。服務(wù)器的輸出信息用黑色字表示,用戶的輸入信息用粗體字表示 。
仔細(xì)考慮這個對話過程我們會發(fā)現(xiàn)一些有趣的事情 。我們可以看到當(dāng) PORT 命令被提交時,它指定了客戶端 (192.168.150.80) 上的一個端口而不是 服務(wù)器的 。當(dāng)我們用被動 FTP 時我們會看到相反的現(xiàn)象 。我們再來關(guān)注 PORT 命令的格式 。就象你在下面的例子看到的一樣,它是一個由六個被逗號隔開的數(shù)字組成的序列 。前四個表示 IP 地址,后兩個組成了用于數(shù)據(jù)連接的端口號 。用第五個數(shù)乘以 256 再加上第六個數(shù)就得到了實(shí)際的端口號 。下面例子中端口號就是 ( (14*256) + 178) = 3762 。我們可以用 netstat 來驗(yàn)證這個端口信息 。
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.
被動 FTP
為了解決 服務(wù)器發(fā)起到客戶的連接的問題,人們開發(fā)了一種不同的 FTP 連接方式 。這就是所謂的被動方式,或者叫做 PASV ,當(dāng)客戶端通知 服務(wù)器它處于被動模式時才啟用 。
在被動方式 FTP 中,命令連接和數(shù)據(jù)連接都由客戶端,這樣就可以解決從 服務(wù)器到客戶端的數(shù)據(jù)端口的入方向連接被防火墻過濾掉的問題 。當(dāng)開啟一個 FTP 連接時,客戶端打開兩個任意的非特權(quán)本地端口( N > 1024 和 N+1 ) 。第一個端口連接 服務(wù)器的 21 端口,但與主動方式的 FTP 不同,客戶端不會提交 PORT 命令并允許 服務(wù)器來回連它的數(shù)據(jù)端口,而是提交 PASV 命令 。這樣做的結(jié)果是 服務(wù)器會開啟一個任意的非特權(quán)端口( P > 1024 ),并發(fā)送 PORT P 命令給客戶端 。然后客戶端發(fā)起從本地端口 N+1 到 服務(wù)器的端口 P 的連接用來傳送數(shù)據(jù) 。
對于 服務(wù)器端的防火墻來說,必須允許下面的通訊才能支持被動方式的 FTP:
從任何端口到 服務(wù)器的 21 端口 (客戶端初始化的連接 S<-C )
服務(wù)器的 21 端口到任何大于 1024 的端口 ( 服務(wù)器響應(yīng)到客戶端的控制端口的連接 S->C )
從任何端口到 服務(wù)器的大于 1024 端口 (入;客戶端初始化數(shù)據(jù)連接到 服務(wù)器指定的任意端口 S<-C )
服務(wù)器的大于 1024 端口到遠(yuǎn)程的大于 1024 的端口(出; 服務(wù)器發(fā)送 ACK 響應(yīng)和數(shù)據(jù)到客戶端的數(shù)據(jù)端口 S->C )
畫出來的話,被動方式的FTP連接過程大概是下圖的樣子:
在第 1 步中,客戶端的命令端口與 服務(wù)器的命令端口建立連接,并發(fā)送命令 “PASV” 。然后在第 2 步中, 服務(wù)器返回命令 "PORT 2024" ,告訴客戶端( 服務(wù)器)用哪個端口偵聽數(shù)據(jù)連接 。在第 3 步中,客戶端初始化一個從自己的數(shù)據(jù)端口到 服務(wù)器端指定的數(shù)據(jù)端口的數(shù)據(jù)連接 。最后 服務(wù)器在第 4 步中給客戶端的數(shù)據(jù)端口返回一個 "ACK" 響應(yīng) 。
被動方式的 FTP 解決了客戶端的許多問題,但同時給 服務(wù)器端帶來了更多的問題 。最大的問題是需要允許從任意遠(yuǎn)程終端到 服務(wù)器高位端口的連接 。幸運(yùn)的是,許多 FTP 守護(hù)程序,包括流行的 WU-FTPD 允許管理員指定 FTP 服務(wù)器使用的端口范圍 。詳細(xì)內(nèi)容參看附錄 1 。
第二個問題是客戶端有的支持被動模式,有的不支持被動模式,必須考慮如何能支持這些客戶端,以及為他們提供解決辦法 。例如, Solaris 提供的 FTP 命令行工具就不支持被動模式,需要第三方的 FTP 客戶端,比如 ncftp 。
隨著 WWW 的廣泛流行,許多人習(xí)慣用 web 瀏覽器作為 FTP 客戶端 。大多數(shù)瀏覽器只在訪問 ftp:// 這樣的 URL 時才支持被動模式 。這到底是好還是壞取決于 服務(wù)器和防火墻的配置 。
被動 FTP 的例子
下面是一個被動 FTP 會話的實(shí)際例子,只是 服務(wù)器名、 IP 地址和用戶名都做了改動 。在這個例子中, FTP 會話從 testbox1.slacksite.com (192.168.150.80) ,一個運(yùn)行標(biāo)準(zhǔn)的 FTP 命令行客戶端的 Linux 工作站,發(fā)起到 testbox2.slacksite.com (192.168.150.90) ,一個運(yùn)行 ProFTPd 1.2.2RC2 的 Linux 工作站 。debugging ( -d )選項(xiàng)用來在 FTP 客戶端顯示連接的詳細(xì)過程 。紅色的文字是 debugging 信息,顯示的是發(fā)送到 服務(wù)器的實(shí)際 FTP 命令和所產(chǎn)生的回應(yīng)信息 。服務(wù)器的輸出信息用黑色字表示,用戶的輸入信息用粗體字表示 。
注意此例中的 PORT 命令與主動 FTP 例子的不同 。這里,我們看到是 服務(wù)器(192.168.150.90) 而不是客戶端的一個端口被打開了 。可以跟上面的主動 FTP 例子中的 PORT 命令格式對比一下 。
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> passive
Passive mode on.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (192,168,150,90,195,149).
---> 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.
總結(jié)
下面的圖表會幫助管理員們記住每種 FTP 方式是怎樣工作的:
主動 FTP :
命令連接:客戶端 >1024 端口 -> 服務(wù)器 21 端口
數(shù)據(jù)連接:客戶端 >1024 端口 <- 服務(wù)器 20 端口
被動 FTP :
命令連接:客戶端 >1024 端口 -> 服務(wù)器 21 端口
數(shù)據(jù)連接:客戶端 >1024 端口 -> 服務(wù)器 >1024 端口
下面是主動與被動 FTP 優(yōu)缺點(diǎn)的簡要總結(jié):
主動 FTP 對 FTP 服務(wù)器的管理有利,但對客戶端的管理不利 。因?yàn)?FTP 服務(wù)器企圖與客戶端的高位隨機(jī)端口建立連接,而這個端口很有可能被客戶端的防火墻阻塞掉 。被動 FTP 對 FTP 客戶端的管理有利,但對 服務(wù)器端的管理不利 。因?yàn)榭蛻舳艘c 服務(wù)器端建立兩個連接,其中一個連到一個高位隨機(jī)端口,而這個端口很有可能被 服務(wù)器端的防火墻阻塞掉 。
幸運(yùn)的是,有折衷的辦法 。既然 FTP 服務(wù)器的管理員需要他們的 服務(wù)器有最多的客戶連接,那么必須得支持被動 FTP 。我們可以通過為 FTP 服務(wù)器指定一個有限的端口范圍來減小 服務(wù)器高位端口的暴露 。這樣,不在這個范圍的任何端口會被 服務(wù)器的防火墻阻塞 。雖然這沒有消除所有針對服務(wù)器的危險(xiǎn),但它大大減少了危險(xiǎn) 。詳細(xì)信息參看附錄 1 。
解決辦法,譬如leapftp,按F4,站點(diǎn)管理器,高級選項(xiàng),“使用PASV模式”打勾去掉。
參考資料
O'Reilly 出版的《組建 Internet 防火墻》(第二版, Brent Chapman , Elizabeth Zwicky 著)是一本很不錯的參考資料 。里面講述了各種 Internet 協(xié)議如何工作,以及有關(guān)防火墻的例子 。
最權(quán)威的 FTP 參考資料是 RFC 959 ,它是 FTP 協(xié)議的官方規(guī)范 。RFC 的資料可以從許多網(wǎng)站上下載,例如:ftp://nic.merit.edu/documents/rfc/rfc0959.txt。
作者:Leo_wl
出處:http://www.cnblogs.com/Leo_wl/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
版權(quán)信息
總結(jié)
以上是生活随笔為你收集整理的连接ftp时出现Entering Passive Mode是怎么回事解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode559. N叉树的最大深
- 下一篇: Windows及Android倍速播放视