網絡編程之FTP文件傳輸協議

FTP文件傳輸協議:


一、簡述:

1、TCP/IP協議簇,應用層協議,採用服務端與客戶端通信方式共享文件。

2、FTP根目錄:/            (如路徑: /hello/)  

3、現在的FTP一般用Serv-U搭建,IIS搭建的FTP服務端與Serv-U搭建的服務端返回的響應信息格式不一樣,可能會導致解析出錯。

4、服務端監聽端口:

1)端口20:傳輸套接字(僅用於傳輸文件,每傳輸完畢一次,就關閉一次連接)

2)端口21:控制套接字(對話,傳輸控制,獲取信息,持久連接)


二、FTP缺點:

1、明文登錄.
2、FTP客戶端程序因使用>1024端口接收大數據,容易被防火牆過濾.

  (被動模式解決,被動模式的概念在下面)

3、運行FTP服務端程序的機器可能在連接目標監聽隨機端口被防火牆提示.
4、FTP在傳輸數量多的小文件性能不好.


三、匿名登錄:

1、爲了實現文件在互聯網上傳輸的開放性,服務端管理員可以建立一個特殊的用戶ID,
   提供給互聯網上的用戶下載和上傳文件,這就是匿名用戶,它不需要密碼.

2、常用的匿名登錄名稱:anonymous


主動模式與被動模式的概念:(建立文件傳輸連接的兩種不同方式而已)

一、主動模式:

1、客戶端創建一個監聽套接字,監聽端口>1024,控制套接字發送PORT命令附帶IP地址以及端口(特殊格式)到服務端.
2、服務端收到PORT命令,服務端的20端口連接到客戶端,建立文件傳輸通信.

二、被動模式:

1、客戶端發送PASV命令,服務端收到後,會創建一個在>1024端口的監聽套接字,然後回覆一串IP地址以及端口號(特殊格式).
2、通過回覆的信息,連接到服務端的文件傳輸套接字上進行通信.


三、兩種模式下的IP地址以及端口號的特殊表示形式:(須知)

1、PORT與PASV命令表示IP和端口的特殊格式:(PORT與PASV命令使用方式在下面)

舉例:    IP地址:192.168.1.120      端口:4500
表示格式:192,168,1,120,17,148

解釋:
1、注意是逗號.
2、前4個字段表示IP地址,即192,168,1,120,沒有變
3、17,148字段:相當於(17 乘 256) + 148 =  4500端口

總結:
1、使用的是逗號
2、前四字段爲IP地址,第五字段 ×  256 + 第六字段 = 端口號.

3、由於建立文件傳輸套接字連接時,會發送一個IP地址以及端口號(被動模式),說明控制連接與文件傳輸連接有可能不在同一臺機器上,這是由發送參數推斷出來的,並未測試過.

爲什麼會有兩種文件傳輸連接模式:

1、因爲防火牆的存在,導致使用FTP協議的一方可能被防火牆過濾一些東西.
   主動模式:客戶端的>1024端口可能被過濾.

   被動模式:服務端的>1024端口可能被過濾.

通常都是使用被動方式進行FTP連接。


編寫FTP客戶端:

一、編寫步驟:

1、控制套接字連接服務端的21端口,使用USER 、PASS 登錄.
2、利用控制套接字獲取感興趣信息,文件套接字在傳輸文件時才連接服務端.

3、QUIT 退出.


二、上傳文件:

1、文件套接字連接,可以設置一些雜項(如傳輸類型),一般默認就行.
2、發送STOR命令,接收一個服務端的響應碼.
3、開始在文件套接字使用send函數將文件數據上傳上去.
4、文件套接字send執行完畢後,不用管,直接closesocket文件套接字.
5、控制套接字用recv函數等待服務端發出接收完成信號即可.


三、下載文件:

1、文件套接字連接,可以設置一些雜項(如傳輸類型),一般默認就行.
2、發送RETR命令,意思讓服務端把指定的文件的數據,send過來文件套接字,之後接收一個服務端的響應碼(一般爲226發送完畢信號,要等待這個信號來到爲止).
3、226發送完畢信號到來,就可以讓文件套接字recv函數來接收到來的數據了.


四、需要注意:

1、文本模式:傳輸文本文件時使用,一般在使用REST命令斷點續傳時,不能指定爲文本模式.
2、二進制模式:通用


常用命令:(每執行一次命令後,服務端會給與回覆)

一、登錄類:

USER 賬號\r\n登錄賬號
PASS 密碼\r\n登錄密碼
REIN\r\n想重新登錄,連接不會關閉,下一條命令USER可重新連接
QUIT\r\n退出

二、建立文件傳輸套接字通信類:

PASV\r\n被動模式,服務端會回覆一個IP地址和端口,然後你再連接.(一般使用被動模式)
PORT 表示IP端口的特殊格式\r\n主動模式,讓服務端主動來連接你的文件監聽套接字

三、操作文件類:

STOR 文件名\r\n上傳文件
APPE 文件名\r\n上傳文件,如果文件名已存在,把數據插入尾部
DELE 文件名\r\n刪除指定文件
REST 字節個數\r\n跳過字節數,短點續傳,下載文件前使用,使RETR命令僅下載偏移後的部分
RETR 文件名\r\n下載文件
ABOR\r\n放棄傳輸一個文件,將關閉文件套接字通信

注意:REST命令一般不能在文本模式來使用.一般在二進制模式下使用(I),經測試,不能在上傳時使用(不確定,可以自己去試試).

四、目錄操作類:

CWD 目錄名\r\n改變當前目錄到指定目錄
CDUP\r\n返回上一次目錄,當到根目錄時,不變
LIST\r\n顯示當前目錄下的文件,包括長度,文件類型(如目錄)與權限(表示類型:drwxr-xr-x)
LIST 目錄名\r\n顯示指定目錄下的文件,包括長度,文件類型(如目錄)與權限(表示類型:drwxr-xr-x)
MKD 目錄名\r\n創建一個目錄
PWD\r\n顯示當前目錄的路徑
RMD 目錄名\r\n刪除目錄
RNFR 文件或目錄名\r\n將某文件或目錄重命名,接下來要使用RNTO指定新名稱
RNTO 文件或目錄名\r\n重命名爲....
NLST\r\n僅顯示當前目錄下的文件,以\r\n表示下一個
NLST 目錄\r\n僅顯示指定目錄下的文件,以\r\n表示下一個

五、模式與類型:

TYPE 字符\r\n選擇傳輸類型
A爲文本模式
I爲二進制模式
E爲EBCDIC
N爲Nonprint非打印模式
T爲Telnet格式控制符
六、參數信息:

SYST\r\n獲取服務端系統信息(NT或Unix)
STAT 文件或文件夾\r\n獲取相關信息
七、其他不常用的命令:

ACCT 用戶帳號\r\n發送PASS命令並接收到332代碼之後才應發送
SMNT 另一個文件數據系統的路徑\r\n允許用戶裝配另一個文件系統的數據結構而無需改變登錄
MODE 字符\r\n指定傳輸類型:默認爲流模式(S爲流)(B爲塊)(C爲經過壓縮)
STRU 字符\r\n指定結構類型:F爲文件結構(默認值,就是流式傳輸)
ALLO 邏輯字節數\r\n上傳文件前,使用此命令申請內存(本人還沒見到需要的,都是直接上傳)
NOOP測試通信
HELP幫助,會列出有效命令

FTP服務端的響應碼:

150文件狀態良好,打開數據連接
200命令成功
212目錄狀態
213文件狀態
110重新啓動標記應答
500格式錯誤,命令不可識別
501參數語法錯誤
502命令未實現
120在X分鐘內準備好
125連接打開準備傳送
214幫助信息,信息僅對人類用戶有用
215名字系統類型
220對新用戶服務準備好
221服務關閉控制連接,可以退出登錄
202命令未實現
211系統狀態或系統幫助響應
225數據連接打開,無傳輸正在進行
226關閉數據連接,請求的文件操作成功
227進入被動模式
230用戶登錄
331用戶名正確,需要口令
332登錄時需要帳戶信息
350請求的文件操作需要進一步命令
421連接用戶過多
425不能打開數據連接
426關閉連接,中止傳輸
450請求的文件操作未執行
451中止請求的操作:有本地錯誤
452未執行請求的操作:系統存儲空間不足
250請求的文件操作完成
257創建"PATHNAME"
503命令順序錯誤
504此參數下的命令功能未實現
530賬號或密碼錯誤
532存儲文件需要帳戶信息
550未執行請求的操作
551請求操作中止:頁類型未知
552請求的文件操作中止,存儲分配溢出
553未執行請求的操作:文件名不合法

關於與Serv-U搭建FTP服務器通信返回的文件格式:

舉例:發送LIST命令到服務端,返回一個文件列表,每一個文件最前面帶有:drwxr-xr-x
(這應該是Linux下用戶權限與文件類型的表達方式)
(我對Linux不熟,所以一開始我還以爲是什麼加密的數據,其實他代表用戶權限與文件類型)


drwxr-xr-x    10個域   Linux下表示用戶擁有的權限
順序:從左到右
第1位(文件類型):d(目錄文件)、l(鏈接文件),-(普通文件),p(管道)
第2-4位(權限):r(讀)、w(寫)、x(可執行)
第5-7位(此文件屬主的用戶組權限)
第8-10位(其他用戶所具有的權限)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章