FTP的20、21端口,工作模式


什么是FTP?

FTP就是文件傳輸協議 File Transfer Protocol 的縮寫.

FTP端口號是多少?

21

FTP的端口號能改嗎?

ftp的端口號20、21有何區別?

一個是數據端口,一個是控制端口,控制端口一般為21,而數據端口不一定是20,這和 FTP的應用模式有關,如果是主動模式,應該為20,如果為被動模式,由服務器端和客戶端協商而定

FTP Port模式和FTP Passive模式

  當你對一個FTP問題進行排錯時候,你首先要問的一個問題是使用的是port模式的還是passive 模式。因為這兩種行為迥異,所以這兩種模式引起的問題也不同;在過去,客戶端缺省為active(port)模式;近來,由於Port模式的安全問題,許多客戶端的FTP應用缺省為Passive模式。

  >>2.1 FTP Port模式

  Port模式的FTP步驟如下:

1、 客戶端發送一個TCP SYN(TCP同步)包給服務器段眾所周知的FTP控制端口21,客戶端使用暫時的端口作為它的源端口;

2、 服務器端發送SYN ACK(同步確認)包給客戶端,源端口為21,目的端口為客戶端上使用的暫時端口;

3、 客戶端發送一個ACK(確認)包;客戶端使用這個連接來發送FTP命令,服務器端使用這個連接來發送FTP應答;

4、 當用戶請求一個列表(List)請求或者發起一個要求發送或者接受文件的請求,客戶端軟件使用PORT命令,這個命令包含了一個暫時的端口,客戶端希望服 務器在打開一個數據連接時候使用這個暫時端口;PORT命令也包含了一個IP地址,這個IP地址通常是客戶自己的IP地址,而且FTP也支持第三方 (third-party)模式,第三方模式是客戶端告訴服務器端打開與另台主機的連接;

5、 服務器端發送一個SYN包給客戶端的暫時端口,源端口為20,暫時端口為客戶端在PORT命令中發送給服務器端的暫時端口號;

6、 客戶端以源端口為暫時端口,目的端口為20發送一個SYN ACK包;

7、 服務器端發送一個ACK包;

8、 發送數據的主機以這個連接來發送數據,數據以TCP段(注:segment,第4層的PDU)形式發送(一些命令,如STOR表示客戶端要發送數據,RETR表示服務器段發送數據),這些TCP段都需要對方進行ACK確認(注:因為TCP協議是一個面向連接的協議)

9、 當數據傳輸完成以后,發送數據的主機以一個FIN命令來結束數據連接,這個FIN命令需要另一台主機以ACK確認,另一台主機也發送一個FIN命令,這個FIN命令同樣需要發送數據的主機以ACK確認;

10、 客戶端能在控制連接上發送更多的命令,這可以打開和關閉另外的數據連接;有時候客戶端結束后,客戶端以FIN命令來關閉一個控制連接,服務器端以ACK包來確認客戶端的FIN,服務器同樣也發送它的FIN,客戶端用ACK來確認。

下圖圖示了FTP PORT模式前幾步步驟: 
/====================================================================\ 
| | 
| [ ftp Client ] [ ftp Server ] | 
| | 
| (TCP:21 連接初始化,控制端口) | 
| SYN | 
| Port xxxx ----------------------> Port 21 [TCP] | 
| SYN+ACK | 
| Port xxxx <---------------------- Port 21 | 
| ACK | 
| Port xxxx ----------------------> Port 21 | 
| | 
| (控制操作: 用戶列目錄或傳輸文件) | 
| | 
| Port, IP, Port yyyy | 
| Port xxxx <---------------------- Port 21 | 
| Port Seccussful | 
| Port xxxx <---------------------- Port 21 | 
| List, Retr or Stor | 
| Port xxxx ----------------------> Port 21 | 
| | 
| | 
| (TCP:20 連接初始化,數據端口) | 
| SYN | 
| Port yyyy <---------------------- Port 20 | 
| SYN+ACK | 
| Port yyyy ----------------------> Port 20 | 
| ACK | 
| Port yyyy <---------------------- Port 20 | 
| | 
| | 
| (數據操作: 數據傳輸) | 
| Data + ACK | 
| Port yyyy <---------------------> Port 20 | 
| . | 
| . | 
| . | 
| | 
\====================================================================/

  FTP Port模式會給網絡管理人員在許多方面帶來很多問題,首先,在PORT命令消息中的IP地址和端口號的編碼不是直白地顯示。另外,應用層的協議命令理論上不應該包含網絡地址信息(注:IP地址),因為這打破了協議層的原則並且可能導致協同性和安全性方面的問題。

  下圖是WildPackets EtherPeek協議分析儀解碼了PORT命令的地址參數,地址參數后是端口號,見PORT192,168,10,232,6,127;6,127部分 的第一個阿拉伯數字乘以256,然后加上第2個阿拉伯數字就得到端口號,所以客戶端指定了端口號為6*256+127=1663; 
/====================================================================\ 
| IP Header - Internet Protocol Datagram | 
| Version: 4 | 
| Header Length: 5 (20 bytes) | 
| | 
| ............... | 
| | 
| Time To Live: 128 | 
| Protocol: 6 TCP - Transmission Control Protocol | 
| Header Checksum: 0xAA36 | 
| Source IP Address: 192.168.0.1 DEMO | 
| Dest. IP Address: 192.168.0.3 VI | 
| No IP Options | 
| | 
| TCP - Transport Control Protocol | 
| Source Port: 2342 manage-exec | 
| Destination Port: 21 ftp | 
| Sequence Number: 2435440100 | 
| Ack Number: 9822605 | 
| Offset: 5 (20 bytes) | 
| Reserved: 0000 | 
| Flags: 1000 | 
| 0. .... (No Urgent pointer) | 
| .1 .... Ack | 
| .. 1... Push | 
| .. .0.. (No Reset) | 
| .. ..0. (No SYN) | 
| .. ...0 (No FIN) | 
| | 
| Window: 65150 | 
| Checksum: 0x832A | 
| Urgent Pointer: 0 | 
| No TCP Options | 
| | 
| FTP Control - File Transfer Protocol | 
| Line 1: PORT 192,168,0,1,9,39<CR><LF> | 
| | 
| FCS - Frame Check Sequence | 
| FCS (Calculated): 0xF4C04A4F | 
\====================================================================/

下圖驗證了服務器端的確從端口20打開到端口1663的TCP連接: 
/====================================================================\ 
| TCP - Transport Control Protocol | 
| Source Port: 20 ftp-data | 
| Destination Port: 1663 | 
| Sequence Number: 2578824336 | 
| Ack Number: 0 | 
| Offset: 6 (24 bytes) | 
| Reserved: 0000 | 
| Flag

 

s: 0010 | 
| 0. .... (No Urgent pointer) | 
| .0 .... (No Ack) | 
| .. 0... (No Push) | 
| .. .0.. (No Reset) | 
| .. ..1. SYN | 
| .. ...0 (No FIN) | 
| | 
| Window: 3731 | 
| Checksum: 0x8A4C | 
| Urgent Pointer: 0 | 
| No TCP Options | 
| | 
| TCP Options | 
| Options Type: 2 Maxinum Segment Size | 
| Length: 4 | 
| MSS: 1460 | 
| | 
| FCS - Frame Check Sequence | 
| FCS (Calculated): 0x5A1BD023 | 
\====================================================================/

  當使用FTP時候,網絡中的防火牆必須要聲明相應的端口,防火牆必須要跟蹤FTP對話然后檢查PORT命令,防火牆必須要參與從服務器端到客戶端在PORT命令中指定的端口連接的建立過程。

  如果網絡中使用了NAT(注:網絡地址翻譯),那么NAT的網關同樣也需要聲明相應的端口,網關需要把在PORT命令中指定的IP地址翻譯成分配給客戶的地址,然后重新計算TCP的Checksum ;如果網關沒有正確地執行這個操作,FTP就失敗了。

  黑客可能會利用FTP支持第三方特性這一特點,在PORT命令中設置IP地址和端口號參數來指定一台目標主機的地址和端口號(有時候稱這種攻擊為FTP反彈攻擊),例如黑客可以讓一台FTP服務器不斷地從它的源端口20發送TCP SYN包給一系列目的端口,讓FTP服務器看起來正在進行端口掃描,目的主機不知道攻擊來自黑客的主機,看起來攻擊象是來自FTP服務器。一些常用的FTP應用在PORT命令中設置地址為0.0.0.0,這樣做的意圖是讓FTP服務器只需要與打開控制連接 
的相同客戶進行數據連接,設置地址為0.0.0.0可能會讓防火牆不知所措。例如,CISCO PIX IOS6.0以上版本的PIX(注:CISCO硬件防火牆設備,6.0以上版本為其修正了相關的FTP協議)要求數據連接的IP地址與已經存在的控制連接 的IP地址必須相同。這樣做的原因是防止黑客用PORT命令來攻擊別的機器,雖然一些FTP應用設置IP地址為0.0.0.0不是有意圖的攻擊,但在 PIX修正協議環境下的確引起了一些問題,同時對其他不允許第三方模式和避免FTP反彈攻擊的防火牆來說,這也會引起相同的問題。

>>2.2 FTP Passive模式

  下面的列表描述了Passive模式的FTP的步驟,步驟1到3和Port模式FTP相同,步驟9到11同樣與Port模式FTP最后三步相同。

1、客戶端發送一個TCP SYN(TCP同步)包給服務器段眾所周知的FTP控制端口21,客戶端使用暫時的端口作為它的源端口;

2、服務器端發送SYN ACK(同步確認)包給客戶端,源端口為21,目的端口為客戶端上使用的暫時端口;

3、客戶端發送一個ACK(確認)包;客戶端使用這個連接來發送FTP命令,服務器端使用這個連接來發送FTP應答;

4、當用戶請求一個列表(List)或者發送或接收文件時候,客戶端軟件發送PASV命令給服務器端表明客戶端希望進入Passive模式;

5、服務器端進行應答,應答包括服務器的IP地址和一個暫時的端口,這個暫時的端口是客戶端在打開數據傳輸連接時應該使用的端口;

6、客戶端發送一個SYN包,源端口為客戶端自己選擇的一個暫時端口,目的端口為服務器在PASV應答命令中指定的暫時端口號;

7、服務器端發送SYN ACK包給客戶端,目的端口為客戶端自己選擇的暫時端口,源端口為PASV應答中指定的暫時端口號;

8、客戶端發送一個ACK包;

9、發送數據的主機以這個連接來發送數據,數據以TCP段(注:segment,第4層的PDU)形式發送(一些命令,如STOR表示客戶端要發送數據,RETR表示服務器段發送數據),這些TCP段都需要對方進行ACK確認;

10、當數據傳輸完成以后,發送數據的主機以一個FIN命令來結束數據連接,這個FIN命令需要另一台主機以ACK確認,另一台主機也發送一個FIN命令,這個FIN命令同樣需要發送數據的主機以ACK確認;

11、客戶端能在控制連接上發送更多的命令,這可以打開和關閉另外的數據連接;有時候客戶端結束后,客戶端以FIN命令來關閉一個控制連接,服務器端以ACK包來確認客戶端的FIN,服務器同樣也發送它的FIN,客戶端用ACK來確認。

...

...

 >>5.0<< 參考

ftp協議簇 
http://www.ietf.org/rfc/rfc959.txt 
http://www.ietf.org/rfc/rfc1579.txt

ftp安全擴展 
http://www.ietf.org/rfc/rfc2228.txt 
http://www.ietf.org/rfc/rfc2246.txt

ftp安全擴展,SSL接口草案: 
http://www.ietf.org/internet-drafts/draft-murray-auth-ftp-ssl-13.txt

ssl/tls協議規范: 
http://www.ietf.org/rfc/rfc2246.txt

OpenSSL,一個廣為應用的SSL實現: 
http://www.openssl.org

支持ssl ftp的ftp client: 
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#client

支持ssl ftp的ftp server: 
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#server

FTP協議

TCP/IP協議中,FTP標准命令TCP端口號為21,Port方式數據端口為20。FTP協議的任務是從一台計算機將文件傳送到另 一台計算機,它與這兩台計算機所處的位置、聯接的方式、甚至是是否使用相同的操作系統無關。假設兩台計算機通過ftp協議對話,並且能訪問 Internet, 你可以用ftp命令來傳輸文件。每種操作系統使用上有某一些細微差別,但是每種協議基本的命令結構是相同的。 
  FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式。 
  1.ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便於把文件解釋成另外那台計算機存儲文本文件的格式。 
但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸,字庫等信息的非打印字符)。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝,不要對這些文件進行處理,這也是下面要講的二進制傳輸。 
  2.二進制傳輸模式:在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。 
  如果你在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會使傳輸稍微變慢 ,也會損壞數據,使文件變得不能用。(在大多數計算機上,ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果你傳輸二進制文件,所有的位都是重要的。)如果你知道這兩台機器是同樣的,則二進制方式對文本文件和數據文件都是有效的。 
  5. FTP的工作方式 
  FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動方式),一種是 Passive (也就是PASV,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP服務器。Passive模式FTP的客戶端發送 PASV命令到 FTP Server。 
  下面介紹一個這兩種方式的工作原理: 
  Port模式FTP 客戶端首先和FTP服務器的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。 
  Passive模式在建立控制通道的時候和Standard模式類似,但建立連接后發送的不是Port命令,而是Pasv命令。FTP服務器收到 Pasv命令后,隨機打開一個高端端口(端口號大於1024)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務 器將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。 
  很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM