Ftp主動模式和被動模式以及java鏈接ftp模式設置 Ftp主動模式和被動模式以及java鏈接ftp模式設置 FTP主動模式與被動模式,及java FTPClient模式設置

https://www.cnblogs.com/huhaoshida/p/5412615.htmlhtml

(1) PORT(主動模式)java

PORT中文稱爲主動模式,工做的原理: FTP客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼登陸,登陸成功後要list列表或者讀取數據時,客戶端隨機開放一個端口(1024以上),發送 PORT命令到FTP服務器,告訴服務器客戶端採用主動模式並開放端口;FTP服務器收到PORT主動模式命令和端口號後,經過服務器的20端口和客戶端開放的端口鏈接,發送數據,原理以下圖。windows

 

 (2) PASV(被動模式)安全

    PASV是Passive的縮寫,中文成爲被動模式,工做原理:FTP客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼登陸,登陸成功後要list列表或者讀取數據時,發送PASV命令到FTP服務器, 服務器在本地隨機開放一個端口(1024以上),而後把開放的端口告訴客戶端, 客戶端再鏈接到服務器開放的端口進行數據傳輸,原理以下圖:服務器

    2.兩種模式的比較網絡

     從上面的運行原來看到,主動模式和被動模式的不一樣簡單概述爲: 主動模式傳送數據時是「服務器」鏈接到「客戶端」的端口;被動模式傳送數據是「客戶端」鏈接到「服務器」的端口。架構

    主動模式須要客戶端必須開放端口給服務器,不少客戶端都是在防火牆內,開放端口給FTP服務器訪問比較困難。post

    被動模式只須要服務器端開放端口給客戶端鏈接就好了。url

參考文獻 http://www.cnblogs.com/mawanglin2008/articles/3607767.htmlhtm

3.java中,內網用被動模式 ,外網鏈接時用主動模式,服務器相應改動(只用上線功能用被動模式去鏈接ftp報錯鏈接不上)

FTPClient ftpClient = new FTPClient();

ftpClient.connect(url, port);

ftpClient.enterLocalActiveMode();    //主動模式
// ftpClient.enterLocalPassiveMode(); 被動模式
ftpClient.setControlEncoding("UTF-8");
ftpClient.changeWorkingDirectory(path);

 

https://www.cnblogs.com/guangshan/p/4386308.html

FTP主動模式與被動模式,及java FTPClient模式設置

 

FTP的主動模式與被動模式

FTP服務器使用20和21兩個網絡端口與FTP客戶端進行通訊。 
FTP服務器的21端口用於傳輸FTP的控制命令,20端口用於傳輸文件數據。


FTP主動模式: 
  FTP客戶端向服務器的FTP控制端口(默認是21)發送鏈接請求,服務器接受鏈接,創建一條命令鏈路;當須要傳送數據時,客戶端在命令鏈路上用PORT的命令告訴服務器我開放了某端口,你過來鏈接我。因而服務器從20端口向客戶端的該端口發送鏈接請求,創建一條數據鏈路來傳送數據。在數據鏈路創建過程當中是服務器主動請求,因此稱爲主動模式。

  當客戶端向服務端鏈接後,使用的是PORT模式,那麼客戶端B會發送一

條命令告訴服務端(客戶端B在本地打開了一個端口N在等着你進行數據鏈接),當服務端收到這個Port命令後 就會向客戶端打開的那個端口N進行鏈接,這種數據鏈接就生成。


FTP被動模式: 
  FTP客戶端向服務器的FTP控制端口(默認21)發送鏈接請求,服務器接受鏈接,創建一條命令鏈路;當須要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端,我打開了某端口,你過來連我。因而客戶端向服務器的該端口發送鏈接請求,創建一條數據鏈路來傳送數據。在數據鏈路創建的過程當中是服務器被動等待客戶機的請求,因此稱被動模式。
  由上面幾點能夠看出,FTP服務器的主動與被動模式是以FTP服務器進行數據傳送鏈接的主動或被動爲依據的。
  對於FTP服務器與客戶機之間存在的網絡防火牆,不管是服務器側仍是客戶機側的網 絡防火牆設置策略都要保證FTP服務器和客戶端之間可以正常創建命令鏈路和數據鏈路。

  當客戶端B向服務端鏈接後,使用的是PASV模式,服務端會發信息給客戶端,這個信息是(服務端在本地打開了一個端口M,你如今去鏈接我吧),當客戶端收到這個信息後,就能夠向服務端的M端口進行鏈接,鏈接成功後,數據鏈接也創建了。

主動模式下: 
  客戶機 與 服務器之間創建鏈接時,客戶機是大於1024的端口上,服務器是 20 端口。
  客戶機的端口是大於1024的,而服務器的端口是 21 端口接收請求,而是 20 端口給客戶機迴應。
  容許FTP客戶機從大於1024的端口鏈接服務器的21端口.
  容許FTP服務器從21端口迴應FTP客戶機中大於1024端口的網絡鏈接.
  容許FTP服務器從20端口主動鏈接FTP客戶機中大於1024的端口
  容許FTP客戶機從大於1024的端口迴應來自FTP服務器的20端口的網絡鏈接.
被動模式下: 
  客戶機 與 服務器之間創建鏈接都是在大於1024的端口上的。
  客戶機的端口是大於1024的,而服務器的端口是 21 端口接收請求,而是 從大於1024 端口給客戶機迴應。
  容許FTP客戶機從大於1024的端口鏈接服務器的21端口.
  容許FTP服務器從21端口迴應FTP客戶機中大於1024端口的網絡鏈接.
  允計FTP客戶機從大於1024的端口鏈接FTP服務器的大於1024端口.
  容許FTP服務器從大於1024的端口迴應來自FTP客戶機大於1024端口的網絡鏈接

client開啓大於1024(21吧)的X端口鏈接服務器的21(命令端口),同時開啓X+1端口 
當21號端口鏈接成功後,client會發送PASV命令,通知服務器本身處於被動模式,服務器收到這個消息後,就會開放一個大於1024的端口Y通知client,client接到通知後就會用X+1來鏈接服務器的Y端口,簡單的說就是client主動鏈接服務器 。

 

 

主動與被動FTP優缺點的簡要總結:  
  主動FTP對FTP服務器的管理有利,但對客戶端的管理不利。由於FTP服務器企圖與客戶端的高位隨機端口創建鏈接,而這個端口頗有可能被客戶端的防火牆阻塞掉。 
  被動FTP對FTP客戶端的管理有利,但對服務器端的管理不利。由於客戶端要與服務器端創建兩個鏈接,其中一個連到一個高位隨機端口,而這個端口頗有可能被服務器端的防火牆阻塞掉。
   幸運的是,有折衷的辦法。既然FTP服務器的管理員須要他們的服務器有最多的客戶鏈接,那麼必須得支持被動FTP。咱們能夠經過爲FTP服務器指定一個有限的端口範圍來減少服務器高位端口的暴露。這樣,不在這個範圍的任何端口會被服務器的防火牆阻塞。雖然這沒有消除全部針對服務器的危險,但它大大減小了危險。 

FTP主動與被動的好處和壞處: 
  在ISA(工業標準架構體系Industry Standard Architecture是IBM PC兼容機上的一種總線 )的狀況,若是採用被動模式,因爲IIS是徹底隨機的選擇一個端口,並告知客戶,而後客戶進行主動鏈接,這就意味着在ISA上,你要讓全部的端口都容許動態入站鏈接才行,這樣確定不行,由於太危險了,等於打開了全部的端口連。   
  若是採用主動模式(PORT Mode),IIS選擇好端口後,主動與客戶進行鏈接,這時候不須要像PASV模式那樣打開全部的動態入站鏈接,並且正好相反,咱們須要打開全部的動態出站鏈接便可,安全性增長不少。並且由ISA的IP PACKET FILTER只對ISA本機起做用,不會形成局域網內的客戶「放了羊」。

 

FTPclient在被動模式下,傳送文件使用的是0端口,能夠調用setActivePortRange設置主動模式時的端口範圍。

在windows下使用ftpclient時,須要處理windows下一個FTP主被動模式的缺陷,須要運行以下命令:

netsh advfirewall firewall add rule name=」FTP Service」 action=allow service=ftpsvc protocol=TCP dir=in
netsh advfirewall set global StatefulFTP disable
相關文章
相關標籤/搜索