什麼是FTP?html
FTP就是文件傳輸協議 File Transfer Protocol 的縮寫.數據庫
FTP端口號是多少?安全
21服務器
FTP的端口號能改嗎?網絡
能編碼
ftp的端口號20、21有何區別?spa
FTP Port模式和FTP Passive模式操作系統
當你對一個FTP問題進行排錯時候,你首先要問的一個問題是使用的是port模式的仍是passive 模式。由於這兩種行爲迥異,因此這兩種模式引發的問題也不一樣;在過去,客戶端缺省爲active(port)模式;近來,因爲Port模式的安全問題,許多客戶端的FTP應用缺省爲Passive模式。翻譯
>>2.1 FTP Port模式server
Port模式的FTP步驟以下:
一、 客戶端發送一個TCP SYN(TCP同步)包給服務器段衆所周知的FTP控制端口21,客戶端使用暫時的端口做爲它的源端口;
二、 服務器端發送SYN ACK(同步確認)包給客戶端,源端口爲21,目的端口爲客戶端上使用的暫時端口;
三、 客戶端發送一個ACK(確認)包;客戶端使用這個鏈接來發送FTP命令,服務器端使用這個鏈接來發送FTP應答;
四、 當用戶請求一個列表(List)請求或者發起一個要求發送或者接受文件的請求,客戶端軟件使用PORT命令,這個命令包含了一個暫時的端口,客戶端但願服 務器在打開一個數據鏈接時候使用這個暫時端口;PORT命令也包含了一個IP地址,這個IP地址一般是客戶本身的IP地址,並且FTP也支持第三方 (third-party)模式,第三方模式是客戶端告訴服務器端打開與另臺主機的鏈接;
五、 服務器端發送一個SYN包給客戶端的暫時端口,源端口爲20,暫時端口爲客戶端在PORT命令中發送給服務器端的暫時端口號;
六、 客戶端以源端口爲暫時端口,目的端口爲20發送一個SYN ACK包;
七、 服務器端發送一個ACK包;
八、 發送數據的主機以這個鏈接來發送數據,數據以TCP段(注:segment,第4層的PDU)形式發送(一些命令,如STOR表示客戶端要發送數據,RETR表示服務器段發送數據),這些TCP段都須要對方進行ACK確認(注:由於TCP協議是一個面向鏈接的協議)
九、 當數據傳輸完成之後,發送數據的主機以一個FIN命令來結束數據鏈接,這個FIN命令須要另外一臺主機以ACK確認,另外一臺主機也發送一個FIN命令,這個FIN命令一樣須要發送數據的主機以ACK確認;
十、 客戶端能在控制鏈接上發送更多的命令,這能夠打開和關閉另外的數據鏈接;有時候客戶端結束後,客戶端以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最後三步相同。
一、客戶端發送一個TCP SYN(TCP同步)包給服務器段衆所周知的FTP控制端口21,客戶端使用暫時的端口做爲它的源端口;
二、服務器端發送SYN ACK(同步確認)包給客戶端,源端口爲21,目的端口爲客戶端上使用的暫時端口;
三、客戶端發送一個ACK(確認)包;客戶端使用這個鏈接來發送FTP命令,服務器端使用這個鏈接來發送FTP應答;
四、當用戶請求一個列表(List)或者發送或接收文件時候,客戶端軟件發送PASV命令給服務器端代表客戶端但願進入Passive模式;
五、服務器端進行應答,應答包括服務器的IP地址和一個暫時的端口,這個暫時的端口是客戶端在打開數據傳輸鏈接時應該使用的端口;
六、客戶端發送一個SYN包,源端口爲客戶端本身選擇的一個暫時端口,目的端口爲服務器在PASV應答命令中指定的暫時端口號;
七、服務器端發送SYN ACK包給客戶端,目的端口爲客戶端本身選擇的暫時端口,源端口爲PASV應答中指定的暫時端口號;
八、客戶端發送一個ACK包;
九、發送數據的主機以這個鏈接來發送數據,數據以TCP段(注:segment,第4層的PDU)形式發送(一些命令,如STOR表示客戶端要發送數據,RETR表示服務器段發送數據),這些TCP段都須要對方進行ACK確認;
十、當數據傳輸完成之後,發送數據的主機以一個FIN命令來結束數據鏈接,這個FIN命令須要另外一臺主機以ACK確認,另外一臺主機也發送一個FIN命令,這個FIN命令一樣須要發送數據的主機以ACK確認;
十一、客戶端能在控制鏈接上發送更多的命令,這能夠打開和關閉另外的數據鏈接;有時候客戶端結束後,客戶端以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沒法和內部網絡的客戶端創建一個新的鏈接,形成沒法工做。