FTP协议学习总结
文件傳輸協(xié)議(FTP)必將消亡
文件傳輸協(xié)議(FTP)在RFC 959中定義,于1985年10月發(fā)布。文件傳輸協(xié)議(FTP)被設(shè)計(jì)成為一個(gè)跨平臺(tái)的、簡(jiǎn)單且易于實(shí)現(xiàn)的協(xié)議。
文件傳輸協(xié)議(FTP)有一個(gè)漫長(zhǎng)的演化史,是互聯(lián)網(wǎng)上最重要的應(yīng)用之一,但時(shí)至今日,卻已江河日下。本文作者從各方面列舉了一些
文件傳輸協(xié)議(FTP)為人詬病的缺點(diǎn)。
1.數(shù)據(jù)傳輸模式不合理
不考慮文件自身的內(nèi)容,一味使用ASCII模式傳輸數(shù)據(jù)是不合理的。文件傳輸協(xié)議(FTP)應(yīng)該具有自動(dòng)檢測(cè)功能,當(dāng)然用戶也可以進(jìn)行
自定義。
雖然現(xiàn)在許多Linux和Windows客戶端已經(jīng)支持自動(dòng)傳輸模式,但多達(dá)數(shù)代的UNIX和Windows客戶端都默認(rèn)使用ASCII傳輸模式,這種傳輸
模式甚至?xí)斐晌募p壞。
2.工作方式設(shè)計(jì)不合理
文件傳輸協(xié)議(FTP)可以在主動(dòng)模式(PORT)或被動(dòng)模式(PASV)下工作,這決定了數(shù)據(jù)鏈接建立的方式。
在主動(dòng)模式下,客戶端首先向服務(wù)器端發(fā)送IP地址和端口號(hào),然后等待服務(wù)器端建立TCP鏈接。在被動(dòng)模式下,客戶端同樣首先建立到服
務(wù)器的鏈接,但服務(wù)器端會(huì)開啟一個(gè)端口(1024到5000之間),等待客戶端傳輸數(shù)據(jù)。
文件傳輸協(xié)議(FTP)中最讓人不可思議的是,客戶端會(huì)偵聽服務(wù)器端!
3.與防火墻工作不協(xié)調(diào)
在文件傳輸協(xié)議(FTP)誕生在網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)和防火墻之前,那時(shí)的網(wǎng)絡(luò)還不存在惡意攻擊。今天大多數(shù)最終用戶的IPv4地址已
不可路由,這是因?yàn)榉阑饓Φ氖褂煤虸Pv4地址的短缺。
這對(duì)FTP意味著什么呢?這意味著如果FTP客戶端IP地址不可路由,或者位于防火墻之后,那么就只能使用被動(dòng)傳輸模式進(jìn)行數(shù)據(jù)傳輸。
如果服務(wù)器端的IP地址也不可路由,或者位于防火墻之后呢?FTP將無法進(jìn)行數(shù)據(jù)傳輸!
現(xiàn)在,許多防火墻適用于NAT環(huán)境,可以使用一些特殊的技巧(hacks)允許FTP在防火墻之后正常工作。當(dāng)然,這需要對(duì)防火墻進(jìn)行配置
。
4.密碼安全策略不完善
在互聯(lián)網(wǎng)早期,文件傳輸協(xié)議(FTP)并沒有對(duì)密碼安全作出規(guī)定。在FTP客戶端和服務(wù)器端,數(shù)據(jù)以明文的形式傳輸,任何對(duì)通訊路徑
上的路由具有控制能力的人,都可以通過嗅探獲取你的密碼和數(shù)據(jù)。
我們當(dāng)然可以使用SSL封裝FTP,但FTP是通過建立多次鏈接進(jìn)行數(shù)據(jù)傳輸?shù)?#xff0c;我們即便是保護(hù)了密碼安全,也很難保護(hù)數(shù)據(jù)傳輸?shù)陌踩?
。
自文件傳輸協(xié)議(FTP)發(fā)布以來,安全的數(shù)據(jù)傳輸也經(jīng)歷了長(zhǎng)足發(fā)展,推薦使用SCP取代FTP進(jìn)行文件傳輸。
5.FTP協(xié)議效率低下
從FTP服務(wù)器上檢索一個(gè)文件,包含繁復(fù)的交換握手步驟:
客戶端建立到FTP服務(wù)器端控制端口的TCP Socket鏈接,并等待TCP握手完成
客戶端等待服務(wù)器端發(fā)送回執(zhí)
客戶端向服務(wù)器端發(fā)送用戶名并等待響應(yīng)
客戶端向服務(wù)器端發(fā)送密碼并等待響應(yīng)
客戶端向服務(wù)器端發(fā)送SYST命令并等待響應(yīng)
客戶端向服務(wù)器端發(fā)送TYPE I命令并等待響應(yīng)
如果用戶需要在服務(wù)器端切換目錄,客戶端仍然發(fā)送命令并等待響應(yīng)
主動(dòng)模式下,客戶端需要發(fā)送PORT命令到服務(wù)器端,然后等待響應(yīng)(被動(dòng)模式與主動(dòng)模式相反)
建立數(shù)據(jù)傳輸鏈接(需要經(jīng)過三次握手,建立一條TCP Socket連接)
通過鏈接傳輸數(shù)據(jù)
客戶端等待服務(wù)器端從控制連接發(fā)送2xx指令,以確保數(shù)據(jù)傳輸成功
客戶端發(fā)送QUIT命令,并等待服務(wù)器響應(yīng)
同樣的情形,我們來看看HTTP協(xié)議:
HTTP客戶端向HTTP服務(wù)器端建立一條TCP Socket連接
HTTP客戶端向HTTP服務(wù)器端發(fā)送GET命令,包含URL、HTTP協(xié)議版本、虛擬主機(jī)名等等,并等待響應(yīng)
HTTP服務(wù)器端的響應(yīng)包含了所有想要的數(shù)據(jù),完成!
傳輸一個(gè)文件,FTP需要往復(fù)10次,而HTTP只需要2次!如果傳輸多個(gè)文件,FTP可以省略發(fā)送用戶名和密碼的步驟,而HTTP則可以使用固
定的套接字(Socket),在相同的TCP連接中傳輸文件。
綜上所述,雖然文件傳輸協(xié)議(FTP)曾經(jīng)顯赫一時(shí),但現(xiàn)在已經(jīng)過時(shí)了,它是一個(gè)既不不安全,也不不友好,而且效率低下的協(xié)議,勢(shì)
必被取而代之。
========
FTP協(xié)議詳解
FTP 是File Transfer Protocol(文件傳輸協(xié)議)的英文簡(jiǎn)稱,而中文簡(jiǎn)稱為“文傳協(xié)議”。用于Internet上的控制文件的雙向傳輸。
同時(shí),它也是一個(gè)應(yīng)用程序(Application)。用戶可以通過它把自己的PC機(jī)與世界各地所有運(yùn)行FTP協(xié)議的服務(wù)器相連,訪問服務(wù)器上
的大量程序和信息。FTP的主要作用,就是讓用戶連接上一個(gè)遠(yuǎn)程計(jì)算機(jī)(這些計(jì)算機(jī)上運(yùn)行著FTP服務(wù)器程序)察看遠(yuǎn)程計(jì)算機(jī)有哪些
文件,然后把文件從遠(yuǎn)程計(jì)算機(jī)上拷到本地計(jì)算機(jī),或把本地計(jì)算機(jī)的文件送到遠(yuǎn)程計(jì)算機(jī)去。
工作原理
舉例說明
以下載文件為例,當(dāng)你啟動(dòng)FTP從遠(yuǎn)程計(jì)算機(jī)拷貝文件時(shí)實(shí)際上啟動(dòng)了兩個(gè)程序:一個(gè)本地機(jī)上的FTP客戶程序,它向FTP服務(wù)器提出
拷貝文件的請(qǐng)求。另一個(gè)是啟動(dòng)在遠(yuǎn)程計(jì)算機(jī)的上的FTP服務(wù)器程序,它響應(yīng)你的請(qǐng)求把你指定的文件傳送到你的計(jì)算機(jī)中。FTP采用“
客戶機(jī)/服務(wù)器”方式,用戶端要在自己的本地計(jì)算機(jī)上安裝FTP客戶程序。FTP客戶程序有字符界面和圖形界面兩種。字符界面的FTP的
命令復(fù)雜、繁多。圖形界面的FTP客戶程序,操作上要簡(jiǎn)潔方便的多。
文件傳輸協(xié)議
簡(jiǎn)單地說,支持FTP協(xié)議的服務(wù)器就是FTP服務(wù)器,下面介紹一下什么是FTP協(xié)議。(文件傳輸協(xié)議)
?
一般來說,用互聯(lián)網(wǎng)的首要目的就是實(shí)現(xiàn)信息共享,文件傳輸是信息共享非常重要的一個(gè)內(nèi)容之一。Internet上早期實(shí)現(xiàn)傳輸文件
,并不是一件容易的事,我們知道 Internet是一個(gè)非常復(fù)雜的計(jì)算機(jī)環(huán)境,有PC,有工作站,有MAC,有大型機(jī),而連接在Internet上
的計(jì)算機(jī)有上千萬臺(tái),并且這些計(jì)算機(jī)可能運(yùn)行不同的操作系統(tǒng),有運(yùn)行Unix的服務(wù)器,也有運(yùn)行Dos、Windows的PC機(jī)和運(yùn)行MacOS的蘋
果機(jī)等等,而各種操作系統(tǒng)之間的文件交流問題,需要建立一個(gè)統(tǒng)一的文件傳輸協(xié)議,這就是所謂的FTP。基于不同的操作系統(tǒng)有不同的
FTP應(yīng)用程序,而所有這些應(yīng)用程序都遵守同一種協(xié)議,這樣用戶就可以把自己的文件傳送給別人,或者從其它的用戶環(huán)境中獲得文件。
服務(wù)器系統(tǒng)
與大多數(shù)Internet服務(wù)一樣,FTP也是一個(gè)客戶機(jī)/服務(wù)器系統(tǒng)。用戶通過一個(gè)支持FTP協(xié)議的客戶機(jī)程序,連接到在遠(yuǎn)程主機(jī)上的
FTP服務(wù)器程序。用戶通過客戶機(jī)程序向服務(wù)器程序發(fā)出命令,服務(wù)器程序執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶機(jī)。比如
說,用戶發(fā)出一條命令,要求服務(wù)器向用戶傳送某一個(gè)文件的一份拷貝,服務(wù)器會(huì)響應(yīng)這條命令,將指定文件送至用戶的機(jī)器上。客戶
機(jī)程序代表用戶接收到這個(gè)文件,將其存放在用戶目錄中。
?
在FTP的使用當(dāng)中,用戶經(jīng)常遇到兩個(gè)概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠(yuǎn)程主機(jī)拷貝文件至自己
的計(jì)算機(jī)上;"上傳"文件就是將文件從自己的計(jì)算機(jī)中拷貝至遠(yuǎn)程主機(jī)上。用Internet語(yǔ)言來說,用戶可通過客戶機(jī)程序向(從)遠(yuǎn)程
主機(jī)上傳(下載)文件。
?
使用FTP時(shí)必須首先登錄,在遠(yuǎn)程主機(jī)上獲得相應(yīng)的權(quán)限以后,方可下載或上傳文件。也就是說,要想同哪一臺(tái)計(jì)算機(jī)傳送文件,就
必須具有哪一臺(tái)計(jì)算機(jī)的適當(dāng)授權(quán)。換言之,除非有用戶ID和口令,否則便無法傳送文件。這種情況違背了Internet的開放性,
Internet上的FTP主機(jī)何止千萬,不可能要求每個(gè)用戶在每一臺(tái)主機(jī)上都擁有帳號(hào)。匿名FTP就是為解決這個(gè)問題而產(chǎn)生的。
?
匿名FTP是這樣一種機(jī)制,用戶可通過它連接到遠(yuǎn)程主機(jī)上,并從其下載文件,而無需成為其注冊(cè)用戶。系統(tǒng)管理員建立了一個(gè)特殊
的用戶ID,名為anonymous, Internet上的任何人在任何地方都可使用該用戶ID。
?
通過FTP程序連接匿名FTP主機(jī)的方式同連接普通FTP主機(jī)的方式差不多,只是在要求提供用戶標(biāo)識(shí)ID時(shí)必須輸入anonymous,該用戶
ID的口令可以是任意的字符串。習(xí)慣上,用自己的E-mail地址作為口令,使系統(tǒng)維護(hù)程序能夠記錄下來誰(shuí)在存取這些文件。
?
值得注意的是,匿名FTP不適用于所有Internet主機(jī),它只適用于那些提供了這項(xiàng)服務(wù)的主機(jī)。
?
當(dāng)遠(yuǎn)程主機(jī)提供匿名FTP服務(wù)時(shí),會(huì)指定某些目錄向公眾開放,允許匿名存取。系統(tǒng)中的其余目錄則處于隱匿狀態(tài)。作為一種安全措
施,大多數(shù)匿名FTP主機(jī)都允許用戶從其下載文件,而不允許用戶向其上傳文件,也就是說,用戶可將匿名FTP主機(jī)上的所有文件全部拷
貝到自己的機(jī)器上,但不能將自己機(jī)器上的任何一個(gè)文件拷貝至匿名FTP主機(jī)上。即使有些匿名FTP主機(jī)確實(shí)允許用戶上傳文件,用戶也
只能將文件上傳至某一指定上傳目錄中。隨后,系統(tǒng)管理員會(huì)去檢查這些文件,他會(huì)將這些文件移至另一個(gè)公共下載目錄中,供其他用
戶下載,利用這種方式,遠(yuǎn)程主機(jī)的用戶得到了保護(hù),避免了有人上傳有問題的文件,如帶病毒的文件。
?
作為一個(gè)Internet用戶,可通過FTP在任何兩臺(tái)Internet主機(jī)之間拷貝文件。但是,實(shí)際上大多數(shù)人只有一個(gè)Internet帳戶,FTP主
要用于下載公共文件,例如共享軟件、各公司技術(shù)支持文件等。 Internet上有成千上萬臺(tái)匿名FTP主機(jī),這些主機(jī)上存放著數(shù)不清的文
件,供用戶免費(fèi)拷貝。實(shí)際上,幾乎所有類型的信息,所有類型的計(jì)算機(jī)程序都可以在Internet上找到。這是Internet吸引我們的重要
原因之一。
匿名ftp
匿名FTP使用戶有機(jī)會(huì)存取到世界上最大的信息庫(kù),這個(gè)信息庫(kù)是日積月累起來的,并且還在不斷增長(zhǎng),永不關(guān)閉,涉及到幾乎所有
主題。而且,這一切是免費(fèi)的。
?
匿名FTP是Internet網(wǎng)上發(fā)布軟件的常用方法。Internet之所以能延續(xù)到今天,是因?yàn)槿藗兪褂猛ㄟ^標(biāo)準(zhǔn)協(xié)議提供標(biāo)準(zhǔn)服務(wù)的程序。
像這樣的程序,有許多就是通過匿名FTP發(fā)布的,任何人都可以存取它們。
?
Internet中的有數(shù)目巨大的匿名FTP主機(jī)以及更多的文件,那么到底怎樣才能知道某一特定文件位于哪個(gè)匿名FTP主機(jī)上的那個(gè)目錄
中呢?這正是Archie服務(wù)器所要完成的工作。Archie將自動(dòng)在FTP主機(jī)中進(jìn)行搜索,構(gòu)造一個(gè)包含全部文件目錄信息的數(shù)據(jù)庫(kù),使你可以
直接找到所需文件的位置信息。
?
FTP的用戶分類及權(quán)限歸屬
Real帳戶
這類用戶是指在FTP服務(wù)上擁有帳號(hào)。當(dāng)這類用戶登錄FTP服務(wù)器的時(shí)候,其默認(rèn)的主目錄就是其帳號(hào)命名的目錄。但是,其還可以
變更到其他目錄中去。如系統(tǒng)的主目錄等等。
Guest用戶
在FTP服務(wù)器中,我們往往會(huì)給不同的部門或者某個(gè)特定的用戶設(shè)置一個(gè)帳戶。但是,這個(gè)賬戶有個(gè)特點(diǎn),就是其只能夠訪問自己的
主目錄。服務(wù)器通過這種方式來保障FTP服務(wù)上其他文件的安全性。這類帳戶,在Vsftpd軟件中就叫做Guest用戶。擁有這類用戶的帳戶
,只能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的文件。
Anonymous(匿名)用戶
這也是我們通常所說的匿名訪問。這類用戶是指在FTP服務(wù)器中沒有指定帳戶,但是其仍然可以進(jìn)行匿名訪問某些公開的資源。
?
在組建FTP服務(wù)器的時(shí)候,我們就需要根據(jù)用戶的類型,對(duì)用戶進(jìn)行歸類。默認(rèn)情況下,Vsftpd服務(wù)器會(huì)把建立的所有帳戶都?xì)w屬為
Real用戶。但是,這往往不符合企業(yè)安全的需要。因?yàn)檫@類用戶不僅可以訪問自己的主目錄,而且,還可以訪問其他用戶的目錄。這就
給其他用戶所在的空間 帶來一定的安全隱患。所以,企業(yè)要根據(jù)實(shí)際情況,修改用戶所在的類別。[1]
?
FTP客戶端
ftp客戶端。體積可以說是最小的了,只有330K,免費(fèi)中文版不需要漢化和破解的緣故吧。功能也非常強(qiáng)大,應(yīng)有盡有。可以支持多
線程上傳;還支持直接上傳壓縮包后在空間上直接解壓。
?
8uftp是非常精辟的ftp客戶端。目前體積最小的FTP客戶端工具。
?
終身免費(fèi)中文版,非漢化版,非破解版。
?
涵蓋其它FTP工具功能
?
獨(dú)家支持多線程上傳,使上傳速度更快更穩(wěn)定。
?
同時(shí)支持直接上傳壓縮包,可在空間上直接解壓。也可以在空間上壓縮后直接下載壓縮包。
?
8uftp 2.6 升級(jí)功能
?
1.增加遠(yuǎn)程ftp目錄的復(fù)制URL功能
?
2.增加遠(yuǎn)程ftp目錄和本地目錄對(duì)比的工具
?
通過FTP傳輸文件的一般步驟
命令提示
需要進(jìn)行遠(yuǎn)程文件傳輸?shù)挠?jì)算機(jī)必須安裝和運(yùn)行ftp客戶程序。在windows操作系統(tǒng)的安裝過程中,通常都安裝了tcp/ip協(xié)議軟件,
其中就包含了ftp客戶程序。但是該程序是字符界面而不是圖形界面,這就必須以命令提示符的方式進(jìn)行操作,很不方便。
?
啟動(dòng)ftp客戶程序工作的另一途徑是使用ie瀏覽器,用戶只需要在ie地址欄中輸入如下格式的url地址:ftp://[用戶名:口令@]ftp
服務(wù)器域名[:端口號(hào)]
?
(在CMD命令行下也可以用上述方法連接,通過put命令和get命令達(dá)到上傳和下載的目的,通過ls命令列出目錄,除了上述方法外還
可以在cmd下輸入ftp回車,然后輸入open IP來建立一個(gè)連接,此方法還適用于linux下連接ftp服務(wù)器)
?
通過ie瀏覽器啟動(dòng)ftp的方法盡管可以使用,但是速度較慢,還會(huì)將密碼暴露在ie瀏覽器中而不安全。因此一般都安裝并運(yùn)行專門的
ftp客戶程序。
?
1.在本地電腦上登陸到國(guó)際互聯(lián)網(wǎng).
?
2.搜索有文件共享主機(jī)或者個(gè)人電腦(一般有專門的FTP服務(wù)器網(wǎng)站上公布的,上面有進(jìn)入該主機(jī)或個(gè)人電腦的名稱,口令和路徑).
?
3.當(dāng)與遠(yuǎn)程主機(jī)或者對(duì)方的個(gè)人電腦建立連接后,用對(duì)方提供的用戶名和口令登陸到該主機(jī)或?qū)Ψ降膫€(gè)人電腦.
?
4.在遠(yuǎn)程主機(jī)或?qū)Ψ降膫€(gè)人電腦登陸成功后,就可以上傳你想跟別人分享的東西或者下載別人授權(quán)共享的東西(這里的東西是指能放
到電腦里去又能在顯示屏上看到的東西).
?
5.完成工作后關(guān)閉FTP下載軟件,切斷連接.
?
為了實(shí)現(xiàn)文件傳輸,用戶還要運(yùn)行專門的文件傳輸程序,比如網(wǎng)際快車就有這方面的功能,其它還有很多專門的FTP傳輸軟件,FlashFxp
為其中的杰出軟件。有興趣的網(wǎng)友可以試試其他的軟件,如LeapFTP總歸各有各的特色.
FTP協(xié)議
TCP/IP協(xié)議中,FTP標(biāo)準(zhǔn)命令TCP端口號(hào)為21,Port方式數(shù)據(jù)端口為20。FTP協(xié)議的任務(wù)是從一臺(tái)計(jì)算機(jī)將文件傳送到另一臺(tái)計(jì)算機(jī),
它與這兩臺(tái)計(jì)算機(jī)所處的位置、聯(lián)接的方式、甚至是是否使用相同的操作系統(tǒng)無關(guān)。假設(shè)兩臺(tái)計(jì)算機(jī)通過ftp協(xié)議對(duì)話,并且能訪問
Internet, 你可以用ftp命令來傳輸文件。每種操作系統(tǒng)使用上有某一些細(xì)微差別,但是每種協(xié)議基本的命令結(jié)構(gòu)是相同的。
?
FTP的傳輸有兩種方式:ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。
?
1.ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡(jiǎn)單ASCII碼文本,如果在遠(yuǎn)程機(jī)器上運(yùn)行的不是UNIX,當(dāng)文件傳輸時(shí)ftp通常
會(huì)自動(dòng)地調(diào)整文件的內(nèi)容以便于把文件解釋成另外那臺(tái)計(jì)算機(jī)存儲(chǔ)文本文件的格式。
?
但是常常有這樣的情況,用戶正在傳輸?shù)奈募牟皇俏谋疚募?#xff0c;它們可能是程序,數(shù)據(jù)庫(kù),字處理文件或者壓縮文件(盡管字
處理文件包含的大部分是文本,其中也包含有指示頁(yè)尺寸,字庫(kù)等信息的非打印字符)。在拷貝任何非文本文件之前,用binary 命令告
訴ftp逐字拷貝,不要對(duì)這些文件進(jìn)行處理,這也是下面要講的二進(jìn)制傳輸。
?
2.二進(jìn)制傳輸模式:在二進(jìn)制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對(duì)應(yīng)的。即使目的地機(jī)器上包含位序列的文
件是沒意義的。例如,macintosh以二進(jìn)制方式傳送可執(zhí)行文件到Windows系統(tǒng),在對(duì)方系統(tǒng)上,此文件不能執(zhí)行。
?
如果你在ASCII方式下傳輸二進(jìn)制文件,即使不需要也仍會(huì)轉(zhuǎn)譯。這會(huì)使傳輸稍微變慢 ,也會(huì)損壞數(shù)據(jù),使文件變得不能用。(在
大多數(shù)計(jì)算機(jī)上,ASCII方式一般假設(shè)每一字符的第一有效位無意義,因?yàn)锳SCII字符組合不使用它。如果你傳輸二進(jìn)制文件,所有的位
都是重要的。)如果你知道這兩臺(tái)機(jī)器是同樣的,則二進(jìn)制方式對(duì)文本文件和數(shù)據(jù)文件都是有效的。
?
5. FTP的工作方式
?
FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動(dòng)方式),一種是 Passive (也就是PASV,被動(dòng)方式)。 Standard
模式 FTP的客戶端發(fā)送 PORT 命令到FTP服務(wù)器。Passive模式FTP的客戶端發(fā)送 PASV命令到 FTP Server。
?
下面介紹一個(gè)這兩種方式的工作原理:
?
Port模式FTP 客戶端首先和FTP服務(wù)器的TCP 21端口建立連接,通過這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)
送PORT命令。 PORT命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過自己的TCP 20端口連接至客戶端的指定端
口發(fā)送數(shù)據(jù)。 FTP server必須和客戶端建立一個(gè)新的連接用來傳送數(shù)據(jù)。
?
Passive模式在建立控制通道的時(shí)候和Standard模式類似,但建立連接后發(fā)送的不是Port命令,而是Pasv命令。FTP服務(wù)器收到Pasv
命令后,隨機(jī)打開一個(gè)臨時(shí)端口(也叫自由端口,端口號(hào)大于1023小于65535)并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請(qǐng)求,客戶端連
接FTP服務(wù)器此端口,然后FTP服務(wù)器將通過這個(gè)端口進(jìn)行數(shù)據(jù)的傳送,這個(gè)時(shí)候FTP server不再需要建立一個(gè)新的和客戶端之間的連接
。
?
很多防火墻在設(shè)置的時(shí)候都是不允許接受外部發(fā)起的連接的,所以許多位于防火墻后或內(nèi)網(wǎng)的FTP服務(wù)器不支持PASV模式,因?yàn)榭蛻?
端無法穿過防火墻打開FTP服務(wù)器的高端端口;而許多內(nèi)網(wǎng)的客戶端不能用PORT模式登陸FTP服務(wù)器,因?yàn)閺姆?wù)器的TCP 20無法和內(nèi)部
網(wǎng)絡(luò)的客戶端建立一個(gè)新的連接,造成無法工作。
?
FTP軟件可以更好的幫助你管理FTP目錄 提供更系統(tǒng)的工具
?
FTP工具推薦使用 cuteftp
?
主動(dòng)和被動(dòng)模式FTP有兩種使用模式:主動(dòng)和被動(dòng)。主動(dòng)模式要求客戶端和服務(wù)器端同時(shí)打開并且監(jiān)聽一個(gè)端口以建立連接。在這種
情況下,客戶端由于安裝了防火墻會(huì)產(chǎn)生一些問題。所以,創(chuàng)立了被動(dòng)模式。被動(dòng)模式只要求服務(wù)器端產(chǎn)生一個(gè)監(jiān)聽相應(yīng)端口的進(jìn)程,
這樣就可以繞過客戶端安裝了防火墻的問題。
?
一個(gè)主動(dòng)模式的FTP連接建立要遵循以下步驟:
?
客戶端打開一個(gè)隨機(jī)的端口(端口號(hào)大于1024,在這里,我們稱它為x),同時(shí)一個(gè)FTP進(jìn)程連接至服務(wù)器的21號(hào)命令端口。此時(shí),
源端口為隨機(jī)端口x,在客戶端,遠(yuǎn)程端口為21,在服務(wù)器。
?
客戶端開始監(jiān)聽端口(x+1),同時(shí)向服務(wù)器發(fā)送一個(gè)端口命令(通過服務(wù)器的21號(hào)命令端口),此命令告訴服務(wù)器客戶端正在監(jiān)聽
的端口號(hào)并且已準(zhǔn)備好從此端口接收數(shù)據(jù)。這個(gè)端口就是我們所知的數(shù)據(jù)端口。
?
服務(wù)器打開20號(hào)源端口并且建立和客戶端數(shù)據(jù)端口的連接。此時(shí),源端口為20,遠(yuǎn)程數(shù)據(jù)端口為(x+1)。
?
客戶端通過本地的數(shù)據(jù)端口建立一個(gè)和服務(wù)器20號(hào)端口的連接,然后向服務(wù)器發(fā)送一個(gè)應(yīng)答,告訴服務(wù)器它已經(jīng)建立好了一個(gè)連接
。
========
FTP協(xié)議
FTP(File Transfer Protocol,文件傳輸協(xié)議) 是 TCP/IP 協(xié)議組中的協(xié)議之一。FTP協(xié)議包括兩個(gè)組成部分,其一為FTP服務(wù)器,其二為FTP客戶端。其中FTP服務(wù)器用來存儲(chǔ)文件,用戶可以使用FTP客戶端通過FTP協(xié)議訪問位于FTP服務(wù)器上的資源。在開發(fā)網(wǎng)站的時(shí)候,
通常利用FTP協(xié)議把網(wǎng)頁(yè)或程序傳到Web服務(wù)器上。此外,由于FTP傳輸效率非常高,在網(wǎng)絡(luò)上傳輸大的文件時(shí),一般也采用該協(xié)議。
默認(rèn)情況下FTP協(xié)議使用TCP端口中的 20和21這兩個(gè)端口,其中20用于傳輸數(shù)據(jù),21用于傳輸控制信息。但是,是否使用20作為傳輸數(shù)據(jù)
的端口與FTP使用的傳輸模式有關(guān),如果采用主動(dòng)模式,那么數(shù)據(jù)傳輸端口就是20;如果采用被動(dòng)模式,則具體最終使用哪個(gè)端口要服務(wù)
器端和客戶端協(xié)商決定。
??? FTP協(xié)議
??? File Transfer Protocol
服務(wù)器
同大多數(shù)Internet服務(wù)一樣,FTP也是一個(gè)客戶/服務(wù)器系統(tǒng)。用戶通過一個(gè)客戶機(jī)程序連接至在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行的服務(wù)器程序。依照
FTP 協(xié)議提供服務(wù),進(jìn)行文件傳送的計(jì)算機(jī)就是 FTP服務(wù)器,而連接FTP服務(wù)器,遵循FTP協(xié)議與服務(wù)器傳送文件的電腦就是FTP客戶端。
用戶要連上FTP 服務(wù)器,就要用到 FTP 的客戶端軟件,通常 Windows自帶“ftp”命令,這是一個(gè)命令行的 FTP客戶程序,另外常用的
FTP 客戶程序還有FileZilla、 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-貓眼等。
工作方式
FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動(dòng)方式),一種是 Passive(也就是PASV,被動(dòng)方式)。 Standard模式
FTP的客戶端發(fā)送 PORT 命令到FTP服務(wù)器。Passive模式FTP的客戶端發(fā)送 PASV命令到 FTP Server。
下面介紹一個(gè)這兩種方式的工作原理:
Port
FTP 客戶端首先和FTP服務(wù)器的TCP 21端口建立連接,通過這個(gè)通道發(fā)送命令,客戶端需要接收數(shù)據(jù)的時(shí)候在這個(gè)通道上發(fā)送PORT命令。
PORT命令包含了客戶端用什么端口接收數(shù)據(jù)。在傳送數(shù)據(jù)的時(shí)候,服務(wù)器端通過自己的TCP 20端口連接至客戶端的指定端口發(fā)送數(shù)據(jù)。
FTP server必須和客戶端建立一個(gè)新的連接用來傳送數(shù)據(jù)。
Passive
在建立控制通道的時(shí)候和Standard模式類似,但建立連接后發(fā)送的不是Port命令,而是Pasv命令。FTP服務(wù)器收到Pasv命令后,隨機(jī)打開
一個(gè)高端端口(端口號(hào)大于1024)并且通知客戶端在這個(gè)端口上傳送數(shù)據(jù)的請(qǐng)求,客戶端連接FTP服務(wù)器此端口,然后FTP服務(wù)器將通過
這個(gè)端口進(jìn)行數(shù)據(jù)的傳送,這個(gè)時(shí)候FTP server不再需要建立一個(gè)新的和客戶端之間的連接。
很多防火墻在設(shè)置的時(shí)候都是不允許接受外部發(fā)起的連接的,所以許多位于防火墻后或內(nèi)網(wǎng)的FTP服務(wù)器不支持PASV模式,因?yàn)榭蛻舳藷o
法穿過防火墻打開FTP服務(wù)器的高端端口;而許多內(nèi)網(wǎng)的客戶端不能用PORT模式登陸FTP服務(wù)器,因?yàn)閺姆?wù)器的TCP 20無法和內(nèi)部網(wǎng)絡(luò)
的客戶端建立一個(gè)新的連接,造成無法工作。
FXP
FXP說簡(jiǎn)單點(diǎn)就是一個(gè)FTP客戶端控制兩個(gè)FTP服務(wù)器,在兩個(gè)FTP服務(wù)器之間傳送文件。FXP的全稱為File Exchange Protocol――文件交
換協(xié)議,可以認(rèn)為FXP本身其實(shí)就是FTP的一個(gè)子集,因?yàn)镕XP方式實(shí)際上就是利用了FTP服務(wù)器的Proxy命令,不過它的前提條件是FTP服
務(wù)器要支持PASV,且支持FXP方式。
FXP傳送時(shí),文件并不下載至本地,本地只是發(fā)送控制命令,故FXP傳送時(shí)的速度只與兩個(gè)FTP服務(wù)器之間的網(wǎng)絡(luò)速度有關(guān),而與本地速度
無關(guān)。因FXP方式本地只發(fā)送命令,故在開始傳送后,只要本地不發(fā)送停止的命令,就算是本地關(guān)機(jī)了,FXP仍在傳送,直至一個(gè)文件傳
送完成或文件傳送出錯(cuò)后,FTP服務(wù)器等待本地發(fā)送命令時(shí),才會(huì)因不能接收到命令而終止FXP傳送。
因?yàn)樯鲜龅脑?#xff0c;FXP傳送出錯(cuò)時(shí),本地的用戶進(jìn)程還留在FTP服務(wù)器中,并沒有退出,如此時(shí)再次連接FTP服務(wù)器,可能會(huì)因用戶線程超
過允許,FTP服務(wù)器提示客戶已登陸并拒絕客戶端的連接,直至服務(wù)器中的傀儡進(jìn)程因超時(shí)或其他原因被FTP服務(wù)器殺死后,才能再次連
接FTP服務(wù)器。
成功FXP有兩個(gè)必要條件:①兩個(gè)FTP服務(wù)器均支持FXP;②兩個(gè)FTP服務(wù)器均支持PASV方式。但并不是說滿足這兩個(gè)條件的FTP服務(wù)器均經(jīng)
本地操作成功FXP,這還與本地與FTP服務(wù)器的網(wǎng)絡(luò)狀況有關(guān)。故有時(shí)會(huì)出現(xiàn)同樣兩個(gè)FTP,別人可以FXP,而你不可以的情況。
用戶授權(quán)
授權(quán)
要連上 FTP 服務(wù)器(即“登陸”),必須要有該 FTP 服務(wù)器授權(quán)的帳號(hào),也就是說你只有在有了一個(gè)用戶標(biāo)識(shí)和一個(gè)口令后才能登陸
FTP服務(wù)器,享受FTP服務(wù)器提供的服務(wù)。
地址格式
FTP地址如下:
ftp://用戶名:密碼@FTP服務(wù)器IP或域名:FTP命令端口/路徑/文件名
上面的參數(shù)除FTP服務(wù)器IP或域名為必要項(xiàng)外,其他都不是必須的。如以下地址都是有效FTP地址:
ftp://foolish.6600.org
ftp://list:list@foolish.6600.org
ftp://list:list@foolish.6600.org:2003
ftp://list:list@foolish.6600.org:2003/soft/list.txt
匿名
互連網(wǎng)中有很大一部分 FTP 服務(wù)器被稱為“匿名”(Anonymous)FTP 服務(wù)器。這類服務(wù)器的目的是向公眾提供文件拷貝服務(wù),不要求
用戶事先在該服務(wù)器進(jìn)行登記注冊(cè),也不用取得FTP服務(wù)器的授權(quán)。
Anonymous(匿名文件傳輸)能夠使用戶與遠(yuǎn)程主機(jī)建立連接并以匿名身份從遠(yuǎn)程主機(jī)上拷貝文件,而不必是該遠(yuǎn)程主機(jī)的注冊(cè)用戶。用
戶使用特殊的用戶名“anonymous”登陸FTP服務(wù),就可訪問遠(yuǎn)程主機(jī)上公開的文件。許多系統(tǒng)要求用戶將Email地址作為口令,以便更好
地對(duì)訪問進(jìn)行跟綜。匿名FTP一直是Internet上獲取信息資源的最主要方式,在Internet成千上萬的匿名FTP主機(jī)中存儲(chǔ)著無以計(jì)數(shù)的文
件,這些文件包含了各種各樣的信息,數(shù)據(jù)和軟件。人們只要知道特定信息資源的主機(jī)地址,就可以用匿名FTP登錄獲取所需的信息資料
。雖然目前使用WWW環(huán)境已取代匿名FTP成為最主要的信息查詢方式,但是匿名FTP仍是 Internet上傳輸分發(fā)軟件的一種基本方法。如red
hat 、autodesk等公司的匿名站點(diǎn)。
傳輸模式
FTP協(xié)議的任務(wù)是從一臺(tái)計(jì)算機(jī)將文件傳送到另一臺(tái)計(jì)算機(jī),它與這兩臺(tái)計(jì)算機(jī)所處的位置、聯(lián)接的方式、甚至是是否使用相同的操作系
統(tǒng)無關(guān)。假設(shè)兩臺(tái)計(jì)算機(jī)通過ftp協(xié)議對(duì)話,并且能訪問Internet,
你可以用ftp命令來傳輸文件。每種操作系統(tǒng)使用上有某一些細(xì)微差別,但是每種協(xié)議基本的命令結(jié)構(gòu)是相同的。
FTP的傳輸有兩種方式:ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。
ASCII傳輸模式
假定用戶正在拷貝的文件包含的簡(jiǎn)單ASCII碼文本,如果在遠(yuǎn)程機(jī)器上運(yùn)行的是不同的操作系統(tǒng),當(dāng)文件傳輸時(shí)ftp通常會(huì)自動(dòng)地調(diào)整文
件的內(nèi)容以便于把文件解釋成另外那臺(tái)計(jì)算機(jī)存儲(chǔ)文本文件的格式。但是常常有這樣的情況,用戶正在傳輸?shù)奈募牟皇俏谋疚募?
,它們可能是程序,數(shù)據(jù)庫(kù),字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁(yè)尺寸,字庫(kù)等信息
的非打印字符)。
在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝,不要對(duì)這些文件進(jìn)行處理,這也是下面要講的二進(jìn)制傳輸。
二進(jìn)制傳輸模式
在二進(jìn)制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對(duì)應(yīng)的。即使目的地機(jī)器上包含位序列的文件是沒意義的。例如,
macintosh以二進(jìn)制方式傳送可執(zhí)行文件到Windows系統(tǒng),在對(duì)方系統(tǒng)上,此文件不能執(zhí)行。
如果你在ASCII方式下傳輸二進(jìn)制文件,即使不需要也仍會(huì)轉(zhuǎn)譯。這會(huì)使傳輸稍微變慢 ,也會(huì)損壞數(shù)據(jù),使文件變得不能用。(在大多
數(shù)計(jì)算機(jī)上,ASCII方式一般假設(shè)每一字符的第一有效位無意義,因?yàn)锳SCII字符組合不使用它。如果你傳輸二進(jìn)制文件,所有的位都是
重要的。)如果你知道這兩臺(tái)機(jī)器是同樣的,則二進(jìn)制方式對(duì)文本文件和數(shù)據(jù)文件都是有效的。
========
FTP協(xié)議(指令集)收藏
FTP協(xié)議采用一系列簡(jiǎn)單的協(xié)議來完成文件傳輸?shù)母鞣N任務(wù),在發(fā)送命令的時(shí)候,總是在命令的最后加上一個(gè)回車換行符,在VB中可以用
“vbcrlf”來實(shí)現(xiàn),vc中以“\r\n”表示。以下的命令是從Postel和Reynolds所著的RFC 929修改而來,如果讀者想查看詳細(xì)內(nèi)容,可以
參見英文版RFC 929。注意以下出現(xiàn)地標(biāo)志符CRLF表示的是回車符號(hào),即相當(dāng)于VC中的“\r\n”。
1.? ABOT(Abort,中止)命令
說明:告訴服務(wù)器中止上一次FTP服務(wù)命令及所有相關(guān)的數(shù)據(jù)傳輸。
用法:ABOR﹝CRLF﹞
參數(shù):無。
例子:
SendData "ABOR" + “\r\n”
注釋:中止命命令可以請(qǐng)求“特殊操作”以強(qiáng)行引起服務(wù)器的重視(詳情請(qǐng)參看RFC959)。如果上一次命令已經(jīng)完成(包括數(shù)據(jù)傳輸)
,就不會(huì)導(dǎo)致任何操作。服務(wù)器不會(huì)關(guān)閉控制連接,但必須關(guān)閉數(shù)據(jù)連接。
服務(wù)器在接收到此命令時(shí)可能處于兩種狀態(tài)下:(1)FTP服務(wù)命令已經(jīng)完成,(2)FTP服務(wù)命令尚在處理中。
在第一種狀態(tài)下,服務(wù)器關(guān)閉數(shù)據(jù)連接(如果它是打開的)并響應(yīng)以226應(yīng)答,表示已成功執(zhí)行了中止命令。
在第二種狀態(tài)下,服務(wù)器中止正處理中的FTP服務(wù)并關(guān)閉數(shù)據(jù)連接,返回426應(yīng)答,表示該服務(wù)請(qǐng)求被異常終止。然后服務(wù)器發(fā)送226應(yīng)答
,表示成功執(zhí)行了中止命令。
l???????? 225? 數(shù)據(jù)連接打開,沒有正在進(jìn)行的傳輸
l???????? 226? 關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作成功。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 226? 連接關(guān)閉,傳輸終止。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
2.? ACCT(Account,帳號(hào))命令
說明:指定用戶的帳號(hào)信息。這條命令只能在發(fā)送PASS命令并接收到332代碼之后發(fā)送。
用法:ACCT
參數(shù):Account是用戶的帳號(hào),訪問某些服務(wù)時(shí)可能另外需要它。
例子:
SendData "ACCTN322s"? + “\r\n
注釋:當(dāng)?shù)卿浶枰獛ぬ?hào)信息時(shí),一條成功的PASS命令的響應(yīng)是應(yīng)答代碼332。反之,如果登錄不需要帳號(hào)信息,成功的PASS命令的應(yīng)答是
230;如果在對(duì)話中后來發(fā)出的命令需要帳號(hào)信息,服務(wù)器會(huì)返回332或532應(yīng)答,這分別取決于它是保存(在接收ACCT命令期間)還是丟
棄此命令。
返回值(粗體表示成功):
l???????? 202? 命令還沒有被實(shí)現(xiàn),在此站點(diǎn)上是多余的。
l???????? 230? 用戶已登錄,請(qǐng)繼續(xù)。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 503? 命令的順序不對(duì)。
l???????? 530? 無法登錄。
3.? ALLO(Allocate,分配)命令
說明:發(fā)送文件前在服務(wù)器上分配X個(gè)字節(jié)
用法:ALLO]
參數(shù):NumberBytes是一個(gè)整數(shù),代表為該文件保留的內(nèi)存字節(jié)數(shù)(使用邏輯字節(jié)大小計(jì)算)。MaxSize是在使用記錄或頁(yè)數(shù)據(jù)結(jié)構(gòu)時(shí)可
選的最大記錄或頁(yè)大小。
例子:
SendData "ALLO 3000 128"? + “\r\n
注釋:一些要保留足夠內(nèi)存以容納將要傳輸?shù)男挛募姆?wù),會(huì)請(qǐng)求這條命令。對(duì)于用記錄或頁(yè)結(jié)構(gòu)發(fā)送的文件來說,最大記錄或頁(yè)大
小(以邏輯字節(jié)計(jì))也可能是必需的;它以這條命令的第二個(gè)參數(shù)字段中的十進(jìn)制整數(shù)表示。這第二個(gè)參數(shù)是可選的,但在出現(xiàn)時(shí)應(yīng)該
與第一個(gè)參數(shù)三個(gè)ASCII字符P分隔開。這條命令后跟一條STORe或APPEnd命令。那些不要求事先聲明最大文件大小的服務(wù)器應(yīng)該把ALLO命
令視為NOOP(不操作),而那些只關(guān)心最大記錄或頁(yè)大小的服務(wù)器應(yīng)該受第一個(gè)參數(shù)的值,然后忽略它。
返回值(粗體表示成功):
l???????? 200? 命令成功。
l???????? 202? 命令還沒有被實(shí)現(xiàn),在此站點(diǎn)上是多余的。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將被關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
這其中包括命令行過長(zhǎng)之類的錯(cuò)誤
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤
l???????? 504? 命令中還沒有實(shí)現(xiàn)該參數(shù)
l???????? 530? 無法登錄。
4.? APPE(Append with create,附加和創(chuàng)建)命令
說明:讓服務(wù)器準(zhǔn)備接收一個(gè)文件并指示它把這些數(shù)據(jù)附加到指定的文件名,如果指定的文件尚未存在,就創(chuàng)建它。
用法:APPE
參數(shù):FileName是服務(wù)器站點(diǎn)上一個(gè)完全合格的路徑和文件名。
例子:
SendData "APPE" & szFileName? + “\r\n
返回值如下(粗體表示成功)。
l???????? 110? 重新啟動(dòng)標(biāo)記應(yīng)答。
在此情況下,文本是精確的,而且不會(huì)留給特殊的實(shí)現(xiàn)處理;它必須讀取:
MARK yyyy=mmmm
其中yyyy是用戶進(jìn)程的數(shù)據(jù)流標(biāo)記,mmmm是服務(wù)器上的相應(yīng)標(biāo)記(請(qǐng)注意標(biāo)記和“=”之間的空格)。
l???????? 125? 數(shù)據(jù)連接已打開,傳輸啟動(dòng)。
l???????? 150? 文件狀態(tài)沒問題,準(zhǔn)備打開數(shù)據(jù)進(jìn)行連接。
l???????? 226? 關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作已成功。
l???????? 250? 請(qǐng)求的文件操作沒問題,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 425? 無法打開數(shù)據(jù)連接。
l???????? 426? 連接關(guān)閉;傳輸中止。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)。
l???????? 451? 請(qǐng)求的操作被中止,處理中發(fā)生本地錯(cuò)誤。
l???????? 452? 請(qǐng)求的操作無法執(zhí)行,系統(tǒng)的存儲(chǔ)空間不足。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 532? 文件的存儲(chǔ)需要帳號(hào)。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
l???????? 551? 請(qǐng)求的操作被中止,未知的頁(yè)類型。
l???????? 552? 請(qǐng)求的文件操作被中止,超過了分配的存儲(chǔ)單元(對(duì)當(dāng)前目錄或數(shù)據(jù)集而言)。
l???????? 553? 請(qǐng)求的操作無法執(zhí)行,不允許的文件名。
5.? CDUP(Change to Parent Directory,變?yōu)楦改夸?命令
說明:把當(dāng)前目錄改為遠(yuǎn)程文件系統(tǒng)的根目錄,無需改變登錄、帳號(hào)信息或傳輸參數(shù)。
用法:CDUP
參數(shù):無。
例子:
SendData "CDUP"? + “\r\n
注釋:CDUP目錄可改為父目錄。MS-DOS中的等效命令是cd\。創(chuàng)建這條命令是為了適應(yīng)FTP的不同操作系統(tǒng)。
返回值如下(粗體表示成功):
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
6.? CWD(Change Working Directory,改變工作目錄)命令
說明:把當(dāng)前目錄改為遠(yuǎn)程文件系統(tǒng)的指定路徑,而無需改變登錄、帳號(hào)信息或傳輸參數(shù)。
用法:CWD
參數(shù):Path是遠(yuǎn)程系統(tǒng)上的一個(gè)工作目錄。
例子:
SendData "CWD/pub/cgvb/uploads"? + “\r\n
返回值如下(粗體表示成功):
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
7.? DELE(Delete,刪除)命令
說明:刪除服務(wù)器站點(diǎn)上在路徑名中指定的文件。
用法DELE
參數(shù):FileName是服務(wù)器站點(diǎn)上一個(gè)完全合格的路徑和文件名。
例子:
SendData "DELE temp.fil" + “\r\n
注釋:如果期望有額外的保護(hù)級(jí)別(例如選項(xiàng)"確實(shí)要?jiǎng)h除此文件嗎?"),這應(yīng)該由客戶軟件提供。
返回值如下(粗體表示成功):
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
8.? HELP(Help,幫助)命令
說明:讓服務(wù)器通過到客戶的控制連接發(fā)送有關(guān)其實(shí)現(xiàn)狀態(tài)的幫助信息。
用法:HELP[]
參數(shù):Topic是一個(gè)可選的命令,或是請(qǐng)求哪條命令有關(guān)文本的其他參數(shù)。
例子:
SendData "HELP" + “\r\n
注釋:HELP可以帶一個(gè)參數(shù)(例如任何命令的名稱),以在響應(yīng)中返回更具體的信息。應(yīng)答為類型211或214。建議在輸入U(xiǎn)SER命令前允
許使用HELP命令。服務(wù)器可以使用這個(gè)應(yīng)答來指定站點(diǎn)相關(guān)的參數(shù),例如在對(duì)HELP SITE的響應(yīng)中。
返回值如下(粗體表示成功):
l???????? 211? 系統(tǒng)狀態(tài),或系統(tǒng)的幫助應(yīng)答。
l???????? 214? 幫助消息。
描述如何使用服務(wù)器或某條不常用的具體命令的方法。這個(gè)應(yīng)答只對(duì)用戶有用,因?yàn)閹椭]有標(biāo)準(zhǔn)的格式。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
9.? LIST(List,列表)命令
說明:讓服務(wù)器給客戶發(fā)送一份列表。
用法:LIST[]
參數(shù):PathName是服務(wù)器系統(tǒng)上的一個(gè)有效路徑和文件規(guī)范。
例子:
SendData "LIST pub/*.*" + “\r\n
注釋:如果路徑名指定的是一個(gè)目錄或其他文件組,服務(wù)器傳送一份位于指定目錄中的文件的列表。如果路徑名指定的是一個(gè)文件,那
么服務(wù)應(yīng)該發(fā)送此文件的當(dāng)前信息。空變?cè)獎(jiǎng)t暗指用戶的當(dāng)前工作目錄或默認(rèn)目標(biāo)。數(shù)據(jù)將在類型ASCII或類型EBCDIC中通過數(shù)據(jù)連接傳
送(用戶必須確保ASII或EBCDIC的類型適當(dāng))。
因?yàn)橄到y(tǒng)與系統(tǒng)之間的文件信息可能有很大差別,所以這項(xiàng)信息要在程序中自動(dòng)使用可能很困難,但對(duì)用戶來說會(huì)很有用。
返回值如下(粗體表示成功):
l???????? 125? 數(shù)據(jù)連接已打開,傳輸啟動(dòng)。
l???????? 150? 文件狀態(tài)沒問題,準(zhǔn)備打開數(shù)據(jù)連接。
l???????? 226? 關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作已成功。
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 425? 無法打開數(shù)據(jù)連接。
l???????? 426? 連接關(guān)閉,傳輸中止。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)。
l???????? 451? 請(qǐng)求的操作被中止,處理中發(fā)生本地錯(cuò)誤。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
10.? MKD(Make Directory ,創(chuàng)建目錄)命令
說明:創(chuàng)建一個(gè)在路徑名中指定的目錄(如果是絕對(duì)路徑名)或當(dāng)前工作目錄的子目錄(如果是相對(duì)路徑名)。
用法:MKD
參數(shù):Path是服務(wù)器端上的一個(gè)有效路徑。
例子:
SendData "MKD /users/johnsmith" + “\r\n
返回值如下(粗體表示成功):
l???????? 257? “PATHNAME”已創(chuàng)建。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
11.? MODE(Transfer Mode,傳輸模式)命令
說明:指定傳輸模式。
用法:STRU
參數(shù):Mode是如下ASCII值的其中之一:
S——Stream(流,默認(rèn)值)
B——Block(塊)
C——Compressed(經(jīng)過壓縮)
例子:
SendData "STRU B" + “\r\n
返回值如下(粗體表示成功):
l???????? 200? 命令成功。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 504? 命令中還沒有實(shí)現(xiàn)該參數(shù)。
l???????? 530? 無法登錄。
?
12.? NLST(Name List,名稱列表)命令
說明:讓服務(wù)器給客戶發(fā)送一份目錄列表。
用法:NLST[]
參數(shù):PathName是服務(wù)器系統(tǒng)上的一個(gè)有效路徑和文件規(guī)范。
例子:
SendData "NLST /pub/cgvB" + “\r\n
注釋:路徑名應(yīng)該指定一個(gè)目錄或其他由系統(tǒng)指定的文件組描述符,空變?cè)獎(jiǎng)t暗指當(dāng)前目錄。服務(wù)器將返回一個(gè)文件名稱的流,除此之
外沒有其他信息。數(shù)據(jù)將以ASCII或EBCDIC類型通過數(shù)據(jù)連接傳送,其中的有效路徑名字符串由或分隔(用戶必須確保類型正確)。
NLST希望返回的信息可被程序用來進(jìn)一步地自動(dòng)處理這些文件。例如,在一個(gè)“斷點(diǎn)續(xù)傳”功能的實(shí)現(xiàn)中。
返回值如下(粗體表示成功):
l???????? 125? 數(shù)據(jù)連接已打開,傳輸啟動(dòng)。
l???????? 150? 文件狀態(tài)正常,準(zhǔn)備打開數(shù)據(jù)連接。
l???????? 226? 關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作已成功。
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 425? 無法打開數(shù)據(jù)連接。
l???????? 426? 連接關(guān)閉,傳輸中止。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)。
l???????? 451? 請(qǐng)求的操作被中止,處理中發(fā)生本地錯(cuò)誤。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
13.? NOOP(NOOP,無操作)命令
說明:這是一條不進(jìn)行操作的命令,即它什么都不做。
用法:NOOP
參數(shù):無。
例子:
SendData "NOOP" + “\r\n
注釋:NOOP不會(huì)影響任何參數(shù)或以前輸入的命令。除了讓服務(wù)器發(fā)送一條OK應(yīng)答外,它不指定任何操作。
返回值如下(粗體表示成功):
l???????? 200? 命令成功。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
14.? PASS(Password,密碼)命令
說明:向遠(yuǎn)程系統(tǒng)發(fā)送用戶的密碼,該命令在USER命令后使用。
用法:PASS
參數(shù):Password是由USER命令指定的已注冊(cè)用戶密碼。
例子:
SendData "PASS mypassworD" + “\r\n
注釋:在連接到一臺(tái)FTP服務(wù)器的端口21并接收到一個(gè)由代碼220打頭的行,表示服務(wù)器已準(zhǔn)備好你向它發(fā)USER和PASS命令,以登錄進(jìn)此
FTP服務(wù)器之后,緊跟著發(fā)送USER命令。
PASS命令應(yīng)該緊跟著USER命令。
如果你在此FTP服務(wù)器上有帳號(hào),就可以指定自己的用戶名和密碼。如果想匿名登錄,可以指定用戶名為“Anonymous”,而用自己的電
子郵件地址當(dāng)密碼。
返回值如下(粗體表示成功):
l???????? 202? 命令還沒有被實(shí)現(xiàn),在此站點(diǎn)上是多余的。
l???????? 230? 用戶已登錄,請(qǐng)繼續(xù)。
l???????? 332? 登錄需要帳號(hào)(請(qǐng)參看ACCT命令)。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 530? 無法登錄。
15.? PASV(Passive,被動(dòng)的)命令
說明:告訴服務(wù)器在一個(gè)非標(biāo)準(zhǔn)端口上收聽數(shù)據(jù)連接。
用法:PASV
參數(shù):這條命令請(qǐng)求server-DTP(服務(wù)器數(shù)據(jù)傳送規(guī)約)“收聽”某個(gè)數(shù)據(jù)端口(該端口不是它的默認(rèn)數(shù)據(jù)端口),并等待一個(gè)連接而
不是在收到傳輸命令時(shí)初始化一個(gè)連接。對(duì)這條命令的響應(yīng)包括主機(jī)地址和此服務(wù)器正在收聽的端口地址。
例子:
SendData "PASV" + “\r\n
返回值如下(粗體表示成功):
l???????? 227? 輸入被動(dòng)模式(h1,h2,h3,h4,p1,p2)。
返回值包括一個(gè)在數(shù)據(jù)連接中使用的數(shù)據(jù)端口的HOST-PORT規(guī)約。此參數(shù)是一個(gè)32位Internet主機(jī)地地址和一個(gè)16位TCP端口地的拼接。
這個(gè)地址信息被拆分為8位的字段,并且每個(gè)字段的值是作為一個(gè)十進(jìn)制數(shù)傳輸?shù)?#xff08;在字符串意義上)。H1是Internet主機(jī)地址的高位字
節(jié),p1是端口地址的高位字節(jié)。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 503? 無法登錄。
16.? PORT(Data? Port,數(shù)據(jù)端口)命令
說明:為數(shù)據(jù)連接指定一個(gè)IP地址和本地端口。
用法:PORT
參數(shù):Socket是數(shù)據(jù)連接中要使用的數(shù)據(jù)端口的一個(gè)HOST-PORT規(guī)約。用戶和服務(wù)器都有默認(rèn)的數(shù)據(jù)端口,在正常情況下不需要這條命令
和對(duì)它的應(yīng)答。如果使用了這條命令,則參數(shù)是一個(gè)32個(gè)Internet主機(jī)地址和一個(gè)16位TCP端口地的拼接。這個(gè)地址信息被拆分為8位的
字段,并且每個(gè)字段的值是作為一個(gè)十制數(shù)傳輸?shù)?#xff08;在字符串意義上)。各個(gè)字段用逗號(hào)分隔開。一條端口命令可以是這樣:
PORT h1,h2,h3,p1,p2
其中H1是Internet主機(jī)地址的高位字節(jié),P1是本地端口的高位字節(jié)。
例子:
SendData "PORT 199,199,199,0,33,1" + “\r\n
返回值如下(粗體表示成功):
l???????? 200? 命令成功。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 530? 無法登錄。
17.? PWD(Print Working Directory,打印工作目錄) 命令
說明:在應(yīng)答中返回當(dāng)前工作目錄的名稱。
用法:PWD
參數(shù):無
例子:
SendData "PWD" + “\r\n
返回值如下(粗體表示成功):
l???????? 257? “PATHNAME”已創(chuàng)建
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
18.? QUIT(Logout,注銷)命令
說明:終止連接。
用法:QUIT
參數(shù):無。
例子:
SendData "QUTI" + “\r\n
注釋:QUIT將終止此USER,如果沒有正在進(jìn)行的文件傳送,服務(wù)器將關(guān)閉控制連接。如果文件傳送正在進(jìn)行,該連接仍然打開直至結(jié)果
呼響應(yīng),然后服務(wù)器將其關(guān)閉。如果用戶進(jìn)程正在為幾個(gè)USER傳送文件,不想關(guān)閉后再逐個(gè)重新打開連接,那么應(yīng)該使用REIN命令代替
QUIT。
控制連接的意外關(guān)閉會(huì)導(dǎo)致服導(dǎo)器采取有效的中止(ABORT)和注銷(QUIT)操作。
返回值如下(粗體表示成功):
l???????? 221? 服務(wù)正在關(guān)閉控制連接。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
19.? REIN(Reinitialize,重新初始化) 命令
說明:終止一個(gè)用戶。
用法:REIN
參數(shù):無。
例子:
SendData "REIN" + “\r\n
注釋:除了允許完成正在進(jìn)行的傳送之外,REIN將刷新所有的I/O和帳號(hào)信息。所有參數(shù)都被復(fù)位到默認(rèn)設(shè)置,控制連接仍然打開。這和
用戶在剛剛打開控制連接時(shí)的狀態(tài)是一樣的。如果后來想要登錄,在發(fā)送USER命令之前送一條REIN命令。
返回值如下(粗體表示成功):
l???????? 120? 服務(wù)將在nnn分鐘后準(zhǔn)備好。
l???????? 220? 服務(wù)已為新用戶準(zhǔn)備好。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
20.? REST(Restart,重新啟動(dòng))命令
說明:標(biāo)識(shí)出文件內(nèi)的數(shù)據(jù)點(diǎn),將從這個(gè)點(diǎn)開始繼續(xù)傳送文件。
用法:REST
參數(shù):Marker代表文件傳送將要由此重新啟動(dòng)的服務(wù)器標(biāo)記。
例子:
SendData "REST 244" + “\r\n
注釋:REST不會(huì)引起文件傳送,而只是跳到文件中指定的數(shù)據(jù)檢驗(yàn)點(diǎn)上。RSET后緊跟著適當(dāng)?shù)腇TP服務(wù)命令,該命令才會(huì)引起文件的繼續(xù)
傳送。
返回值如下(粗體表示成功):
l???????? 無響應(yīng)即表示成功。
l???????? 350? 請(qǐng)求的文件操作在等待更進(jìn)一步的信息。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
21.? RETR(Retrieve,檢索)命令
說明:這條命令讓服務(wù)器給客戶傳送一份在路徑名中指定的文件的副本。這不會(huì)影響該文件在服務(wù)器站點(diǎn)上的狀態(tài)和內(nèi)容。
用法:RETR
參數(shù):FileName是服務(wù)器站點(diǎn)上一個(gè)完全合格的路徑和文件名。
例子:
SendData "RETR /pub/cgvb/misc/somefile.zip" + “\r\n
返回值如下(粗體表示成功):
l???????? 110? 重新啟動(dòng)標(biāo)記應(yīng)答。
在此情況下,文體是精確的,而且不會(huì)留給特定的實(shí)現(xiàn)處理;它必須讀取:
MARK yyyy=mmmm
其中yyyy是用戶進(jìn)程的數(shù)據(jù)流標(biāo)記,mmmm是服務(wù)器上的相應(yīng)標(biāo)記(請(qǐng)注意標(biāo)記和“=”之間的空格)。
l???????? 125? 數(shù)據(jù)連接已打開,傳輸啟動(dòng)。
l???????? 150? 文件狀態(tài)沒問題,準(zhǔn)備打開數(shù)據(jù)連接。
l???????? 226? 關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作已成功。
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 425? 無法打開數(shù)據(jù)連接。
l???????? 426? 連接關(guān)閉,傳輸中止。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如,文件正忙)。
l???????? 451? 請(qǐng)求的操作被中止,處理中發(fā)生本地錯(cuò)誤。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 504? 命令中還沒有實(shí)現(xiàn)該參數(shù)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
22.? RMD(Remove Directory,刪除目錄)命令
說明:刪除一個(gè)在路徑名中指定的目錄(如果是絕對(duì)路徑名)或當(dāng)前工作目錄的子目錄(如果是相對(duì)路徑名)。
用法:RMD
參數(shù):Path是服務(wù)器端上一個(gè)完全合格的路徑。
例子:
SeddData "RMD /users/johnsmith" + “\r\n
返回值(粗體表示成功):
l???????? 250? 請(qǐng)求的文件操作沒問題,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行;文件不可用(例如,找不到文件,無訪問權(quán))。
23.? RNFR(Rename From,把…重命名)命令
說明:文件重命名進(jìn)程的前一半。指定要重命名的文件的舊路徑和文件名。
用法:RNFR
參數(shù):FileName是服務(wù)器站點(diǎn)上一個(gè)完全有效的路徑和文件名。
例子:
SendData "RNFR source.zip" + “\r\n
RNFR后面必須緊跟著一條指定新路徑和文件名的"Rename to"命令(RNTO)。
返回值如下(粗體表示成功):
l???????? 無響應(yīng)即表示成功
l???????? 350? 請(qǐng)求的文件操作在等待更進(jìn)一步的信息。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
24.? RNTO(Rename TO,重命名為)命令
說明:文件重命名進(jìn)程的后一半。指定要重命名的文件的新路徑和文件名。
用法:RNTO
參數(shù):FileName是服務(wù)器站點(diǎn)上的一個(gè)有效文件名。
例子:
SendData "RNTO destination.ziP" + “\r\n
注釋:RNTO前面必須是一條"Rename from"命令(RNFR)。RNER和RNTO合在一起才能重命名服務(wù)器上的一個(gè)文件。
返回值如下(粗體表示成功):
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 503? 命令的順序不對(duì)。
l???????? 530? 無法登錄。
l???????? 532? 文件的存儲(chǔ)需要帳號(hào)。
l???????? 553? 請(qǐng)求的操作無法執(zhí)行,不允許的文件名。
25.? SITE(Site Parameters,站點(diǎn)參數(shù))命令
說明:服務(wù)器使用SITE提供了某些服務(wù)特性,這些服務(wù)特性在系統(tǒng)中對(duì)文件傳達(dá)而言是必要的,但又不是足夠通用的可以包括到協(xié)議中
作為命令的那些服務(wù)特性。這些服務(wù)的本質(zhì)和他們的語(yǔ)法規(guī)范可以陳述在對(duì)HELPSITE命令的應(yīng)答中。
用法:SITE
參數(shù):String可以是任何串參數(shù)。
例子:
SendData "SITE chmod 646 mylifle.ziP" + “\r\n
注釋:舉例來說,使用如下語(yǔ)法,你就可以使用SITE來改變一個(gè)文件的權(quán)限屬性。
SITE CHMOD
返回值如下(粗體表示成功):
l???????? 200? 命令成功。
l???????? 202? 命令還沒有被實(shí)現(xiàn),在此站點(diǎn)上是多余的。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變無中有語(yǔ)法錯(cuò)誤。
l???????? 530? 無法登錄。
26.? SMNT(Structure Mount,結(jié)構(gòu)裝配)命令
說明:允許用戶裝配另一個(gè)文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)而無需改變登錄、帳號(hào)信息或傳輸參數(shù)。
用法:SMNT
參數(shù):Path是另一個(gè)文件數(shù)據(jù)系統(tǒng)的路徑。
例子:
SendData "SMNT/users/johnsmith"&vbCrlf
返回值如下(粗體表示成功):
l???????? 202? 命令還沒有被實(shí)現(xiàn),在此站點(diǎn)上是多余的。
l???????? 250? 請(qǐng)求的文件操作沒問題,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
27.? STAT(Status,狀態(tài))命令
說明:使一個(gè)狀態(tài)響應(yīng)以應(yīng)答的形式通過控制連接發(fā)送出去
用法:STAT[]
參數(shù):PathName是服務(wù)器上的一個(gè)有效路徑。
例子:
SendData "STAT /users/johnsmith/mylilE" + “\r\n
注釋:STAT可以在文件傳輸(連同Telnet? IP和Synch信號(hào)一起——請(qǐng)參看RFC959的FTP Commands部分)期間發(fā)送,在此情況下服務(wù)器將
響應(yīng)操作中的進(jìn)程狀態(tài),或者在兩次文件傳輸之間發(fā)送。在后一種情況下,這條命令可以帶一參數(shù)字段。如果指定了一個(gè)完整的路徑名
,STAT將類似于LIST命令,除了它的數(shù)據(jù)是通過控制連接傳送的之外。如果指定的是一個(gè)局部路徑,服務(wù)器將在響應(yīng)中給出一份與指定
項(xiàng)相關(guān)聯(lián)的文件名或?qū)傩粤斜怼H绻恢付▍?shù),服務(wù)器將返回有關(guān)此服務(wù)器FTP進(jìn)程的常規(guī)狀態(tài)信息,這其中包括當(dāng)前所有傳輸參數(shù)的
值和連接狀態(tài)。
返回值如下(粗體表示成功):
l???????? 211? 系統(tǒng)狀態(tài),或系統(tǒng)的幫助應(yīng)答。
l???????? 212? 目錄狀態(tài)。
l???????? 213? 文件狀態(tài)。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)命令。這其中包括包令行過長(zhǎng)類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
l???????? 530? 無法登錄。
28.? STOR(Store,保存)命令
說明:讓服務(wù)器接收一個(gè)來自數(shù)據(jù)連接的文件。
用法:STOR
參數(shù):FileName是服務(wù)器站點(diǎn)上一個(gè)完全合格的路徑和文件名。
例子:
SendData "STOR newfile.zip" + “\r\n
注釋:Store命令讓服務(wù)器接收通過數(shù)據(jù)連接傳輸而來的數(shù)據(jù),并把數(shù)據(jù)存為務(wù)器站點(diǎn)上的文件。如果在路徑名中指定的文件已經(jīng)在服務(wù)
站點(diǎn)上存在,則此文件的內(nèi)容將被傳輸過來的數(shù)據(jù)所替代。如果在路徑名中指定的文件尚未存在,將創(chuàng)建一個(gè)新文件。
返回值如下(值體表示成功):
l???????? 110? 重新啟動(dòng)標(biāo)記應(yīng)答
在此情況下,文本是精確的,而且不會(huì)留給特殊的實(shí)現(xiàn)處理,它必須讀取:
MARK yyyy=mmmm
其中yyyy是用戶進(jìn)程的數(shù)據(jù)流標(biāo)記,mmmm是服務(wù)器上的相應(yīng)相標(biāo)記(請(qǐng)注意標(biāo)記和“=”之間的空格)。
l???????? 125? 數(shù)據(jù)連接已打開,傳輸啟動(dòng)。
l???????? 150? 文件狀態(tài)一切正常,準(zhǔn)備打開數(shù)據(jù)連接。
l???????? 226? 關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作已成功。
l???????? 250? 請(qǐng)求的文件操作正常進(jìn)行,已完成。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 425? 無法打開數(shù)據(jù)連接。
l???????? 426? 連接關(guān)閉,傳輸中止。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)
l???????? 451? 請(qǐng)求的操作被中止,處理中發(fā)生本地錯(cuò)誤。
l???????? 452? 請(qǐng)求的操作無法執(zhí)行,系統(tǒng)的存儲(chǔ)空間不足。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 504? 命令中還沒有實(shí)現(xiàn)該參數(shù)。
l???????? 530? 無法登錄。
l???????? 532? 文件的存儲(chǔ)需要帳號(hào)。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可用(例如找不到文件,無訪問權(quán))。
l???????? 551? 請(qǐng)求的操作被中止,未知的頁(yè)類型。
l???????? 552? 請(qǐng)求的文件操作被子中止,超過了分配的存儲(chǔ)單元(對(duì)當(dāng)前目錄或數(shù)據(jù)集而言)。
l???????? 553? 請(qǐng)求的操作無法執(zhí)行,不允許的文件名。
29.? STOU(Store Unique,存為唯一)命令
說明:讓服務(wù)器準(zhǔn)備接收一個(gè)文件,并指示服務(wù)器把這個(gè)文件用唯一的名稱保存到目的目錄中。
用法:STOU
參數(shù):無。
例子:
SendData "STOU"&vbCrlf
注釋:Store Unique命令和STOR所做的工作是基本一樣的,只是前者在當(dāng)前目錄下生成的文件是以一個(gè)該目錄中唯一的名稱來創(chuàng)建的。
250 Transfer Started響應(yīng)中必須包括這個(gè)生成的名稱。
返回值如下(粗體表示成功):
l???????? 110? 重新啟動(dòng)標(biāo)記應(yīng)答
在此情況下,文本是精確的,而且不會(huì)留給特殊的實(shí)現(xiàn)處理,它必須讀取:
MARKyyyy=mmmm
其中yyyy是用戶進(jìn)程的數(shù)據(jù)流標(biāo)記,mmmm是服務(wù)器上的相應(yīng)標(biāo)記(請(qǐng)注意標(biāo)記和“=”之間的空格)。
l???????? 125? 數(shù)據(jù)連接已打開,傳輸啟動(dòng)。
l???????? 150? 文件狀態(tài)正常,準(zhǔn)備打開數(shù)據(jù)連接。
l???????? 226? 關(guān)閉數(shù)據(jù)連接,請(qǐng)求的文件操作已成功。
l???????? 250? 請(qǐng)求的文件操作沒問題,已完成(該行中包括一個(gè)唯一的文件名)。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答。
l???????? 425? 無法打開數(shù)據(jù)連接。
l???????? 426? 連接關(guān)閉,傳輸中止。
l???????? 450? 請(qǐng)求的文件操作無法執(zhí)行,文件不可用(例如文件正忙)。
l???????? 451? 請(qǐng)求的操作被中止,處理中發(fā)生本地錯(cuò)誤。
l???????? 452? 請(qǐng)求的操作無法執(zhí)行,系統(tǒng)的存儲(chǔ)空間不足。
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 504? 命令中還沒有實(shí)現(xiàn)該參數(shù)。
l???????? 530? 無法登錄。
l???????? 532? 文件的存儲(chǔ)需要帳號(hào)。
l???????? 550? 請(qǐng)求的操作無法執(zhí)行,文件不可(例如找不到文件,無訪問權(quán))。
l???????? 551? 請(qǐng)求的操作作被中止,未知的頁(yè)類型。
l???????? 552? 請(qǐng)求的文件操作被中止,超過了分配的存儲(chǔ)單元(對(duì)當(dāng)前目錄或數(shù)據(jù)集而言)。
l???????? 553請(qǐng)求的操作無法執(zhí)行,存在不允許的文件名。
30.? STRU(File Structure,文件結(jié)構(gòu))命令
說明:指定傳達(dá)數(shù)據(jù)的結(jié)構(gòu)類型。
用法:STRU
參數(shù):StructureType是如下ASCII字符的其中之一:
F——文件結(jié)構(gòu)(默認(rèn)值)
R——記錄結(jié)構(gòu)
P——頁(yè)結(jié)構(gòu)
有關(guān)使用非文件結(jié)構(gòu)的信息請(qǐng)參看RFC959。
例子:
SendData "STRUR" + “\r\n
返回值如下(粗體表示成功):
l???????? 200? 命令成功。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 504? 命令中還沒有實(shí)現(xiàn)該參數(shù)。
l???????? 530? 無法登錄。
31.? SYST(System,系統(tǒng))命令
說明:SYST用于查明服務(wù)器上操作系統(tǒng)的類型。
用法SYST
例子:
SendData "SYST" + “\r\n
注釋:按照推測(cè),應(yīng)答中的第一個(gè)單詞是在Assigned Numbers文檔[4]的當(dāng)前版本中列出的某一個(gè)系統(tǒng)名稱。但是,并不一定都能成功,
新的系統(tǒng)每時(shí)每刻都在涌現(xiàn)。而公開的文檔也許能跟上趟,也許不能。
返回值如下(粗體表示成功):
l?????????????????? 215?? NAME系統(tǒng)類型。NAME是來自Assigned Numbers文檔中的一個(gè)正式的系統(tǒng)名稱。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 502? 命令還沒有被實(shí)現(xiàn)。
32.? TYPE(Representation Type,表達(dá)類型)命令
說明:確定數(shù)據(jù)的傳輸方式。
用法:TYPE
參數(shù):Data type Code是一個(gè)(或幾個(gè))ASCII字符,它標(biāo)識(shí)出一種數(shù)據(jù)表達(dá)類型。
例子:
‘—設(shè)置二進(jìn)制模式
SendData "type I" + “\r\n
注釋:最典型的情況就是使用TYPE命令在ASCII或二進(jìn)制模式(Image,圖像)之間切換。發(fā)送和接收任何類型的文件時(shí)都可以使用圖像
類型。ASCII類型只在傳送文本時(shí)使用。
有幾種類型要用到第二個(gè)參數(shù)。第一個(gè)參數(shù)由一個(gè)單獨(dú)的ASCII字符表示,ASCII和EBCDIC的第二個(gè)Format參數(shù)也是如此;本地字節(jié)的第
二個(gè)參數(shù)則是一個(gè)表示Byte大小的十進(jìn)制整數(shù)。兩個(gè)參數(shù)之間用(Space,即空格,ASCII代碼為32)分隔開。
給類型分配如下代碼:
A——ASCII*
E——EBCDIC*
I——Image(圖像,傳送二進(jìn)制文件時(shí)用它)。
L——Local byte? Byte size(本地字節(jié),字節(jié)大小)
-------------------------------------
*——A和E類型的第二個(gè)Parameter要用到如下三個(gè)的其中一個(gè):
N——Nonprint(非打印)
T——Telnet format effector(Telnet格式控制符)
C——Carriage Control(ASA)托架控制(美國(guó)國(guó)家標(biāo)準(zhǔn))。
默認(rèn)的表達(dá)類型是ASCII Nonprint。如果Format參數(shù)發(fā)生改變,后來只是第一個(gè)參數(shù)發(fā)生了改變,Format將隨即返回到默認(rèn)的Nonprint
。
返回值如下(粗體表示成功):
l???????? 200? 命令成功。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接。
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 504? 命令中還沒有實(shí)現(xiàn)該參數(shù)。
l???????? 530? 無法登錄。
命令:USER(User Name,用戶名稱)
說明:指定遠(yuǎn)程系統(tǒng)上的用戶名稱。和PASS命令一起使用來登錄。
用法:USER
參數(shù):UserName是FTP系統(tǒng)上已經(jīng)注冊(cè)的用戶名稱。
例子:
?
SendData "USER johns" + “\r\n
?
注釋:在連接到一臺(tái)FTP服務(wù)器的端口并接收到一個(gè)由代碼220開頭的行,表示服務(wù)器已經(jīng)準(zhǔn)備好用戶向它發(fā)送USER和PASS命令以登錄進(jìn)
此FTP服務(wù)器之后,緊跟著發(fā)送USER命令。
PASS命令應(yīng)該緊跟著USER命令。
如果在此FTP服務(wù)器上有帳號(hào),就可以指定自己的用戶名和密碼。如果想匿名登錄,可以指定用戶名為“Anonymous”,而用自己的電子
郵件地址當(dāng)密碼。
在會(huì)話期間,可以隨時(shí)發(fā)送USER和PASS命令,把控制權(quán)交給一個(gè)新用戶。
返回值如下(粗體表示成功)
l???????? 230? 用戶已經(jīng)登錄。
l???????? 331? 用戶名正常,需要密碼。
l???????? 332? 登錄需要帳號(hào)。
l???????? 421? 服務(wù)不可用,關(guān)閉控制連接
如果某項(xiàng)服務(wù)獲知自己即將關(guān)閉,會(huì)向所有命令做出這個(gè)應(yīng)答
l???????? 500? 語(yǔ)法錯(cuò)誤,無法識(shí)別命令。這其中包括命令行過長(zhǎng)之類的錯(cuò)誤。
l???????? 501? 參數(shù)或變?cè)杏姓Z(yǔ)法錯(cuò)誤。
l???????? 530? 無法登錄。
以上為大部分的FTP命令,如果想進(jìn)行FTP高級(jí)編程,就必須掌握這些具體的FTP命令。
?
http://blog.csdn.net/code09/archive/2009/03/10/3975223.aspx
========
FTP協(xié)議的基本概念
從三個(gè)方面進(jìn)行講述:基本概念,工作原理和傳輸模式。
網(wǎng)絡(luò)中的數(shù)據(jù)傳輸時(shí)一個(gè)復(fù)雜的過程,完成一個(gè)簡(jiǎn)單的數(shù)據(jù)傳輸,其實(shí)經(jīng)過了很多道協(xié)議的規(guī)范和作用。那么現(xiàn)在我們就來介紹一下FTP
協(xié)議,這個(gè)遠(yuǎn)程文件傳輸協(xié)議。
1. 什么是FTP協(xié)議
FTP協(xié)議(File Transfer Protocol)即遠(yuǎn)程文件傳輸協(xié)議,是一個(gè)用于簡(jiǎn)化IP網(wǎng)絡(luò)上系統(tǒng)之間文件傳送的協(xié)議,FTP是TCP/IP的一種具
體應(yīng)用,它工作在OSI模型的第7層,TCP模型的第四層上,即應(yīng)用層,使用TCP傳輸而不是UDP,FTP建立的就是一個(gè)可靠的連接。采用FTP
協(xié)議可使 Internet用戶高效地從網(wǎng)上的FTP服務(wù)器下載大信息量的數(shù)據(jù)文件,將遠(yuǎn)程主機(jī)上的文件拷貝到自己的計(jì)算機(jī)上。以達(dá)到資源
共享和傳遞信息的目的。由于FTP的使用使得Internet上出現(xiàn)大量為用戶提供的下載服。Internet成為了一個(gè)巨型的軟件倉(cāng)庫(kù)。
2. FTP工作原理
FTP有兩個(gè)過程一個(gè)是控制連接,一個(gè)是數(shù)據(jù)傳輸。FTP協(xié)議不像HTTP協(xié)議一樣需要一個(gè)端口作為連接(默認(rèn)時(shí)HTTP端口是80,FTP端口是
21)。FTP協(xié)議需要兩個(gè)端口,一個(gè)端口是作為控制連接端口,也就是FTP的21端口,用于發(fā)送指令給服務(wù)器以及等待服務(wù)器響應(yīng);另外
一個(gè)端口用于數(shù)據(jù)傳輸端口,端口號(hào)為20(僅用PORT模式),是用建立數(shù)據(jù)傳輸通道的,主要作用是從客戶向服務(wù)器發(fā)送一個(gè)文件,從
服務(wù)器向客戶發(fā)送一個(gè)文件,從服務(wù)器向客戶發(fā)送文件或目錄列表。
3. FTP的傳輸模式
FTP協(xié)議的任務(wù)是從一臺(tái)計(jì)算機(jī)將文件傳送到另一臺(tái)計(jì)算機(jī),它與這兩臺(tái)計(jì)算機(jī)所處的位置、聯(lián)接的方式、甚至是是否使用相同的操作系
統(tǒng)無關(guān)。假設(shè)兩臺(tái)計(jì)算機(jī)通過ftp協(xié)議對(duì)話,并且能訪問Internet, 你可以用ftp命令來傳輸文件。每種操作系統(tǒng)使用上有某一些細(xì)微差
別,但是每種協(xié)議基本的命令結(jié)構(gòu)是相同的。
FTP的傳輸有兩種方式:ASCII傳輸模式和二進(jìn)制數(shù)據(jù)傳輸模式。
ASCII傳輸方式假定用戶正在拷貝的文件包含的簡(jiǎn)單ASCII碼文本,如果在遠(yuǎn)程機(jī)器上運(yùn)行的不是UNIX,當(dāng)文件傳輸時(shí)ftp通常會(huì)自動(dòng)地調(diào)
整文件的內(nèi)容以便于把文件解釋成另外那臺(tái)計(jì)算機(jī)存儲(chǔ)文本文件的格式。但是常常有這樣的情況,用戶正在傳輸?shù)奈募牟皇俏谋?
文件,它們可能是程序,數(shù)據(jù)庫(kù),字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁(yè)尺寸,字庫(kù)等
信息的非打印字符)。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝,不要對(duì)這些文件進(jìn)行處理,這也是下面要講的二
進(jìn)制傳輸。
二進(jìn)制傳輸模式在二進(jìn)制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對(duì)應(yīng)的。即使目的地機(jī)器上包含位序列的文件是沒意
義的。例如,macintosh以二進(jìn)制方式傳送可執(zhí)行文件到Windows系統(tǒng),在對(duì)方系統(tǒng)上,此文件不能執(zhí)行。如果你在ASCII方式下傳輸二進(jìn)
制文件,即使不需要也仍會(huì)轉(zhuǎn)譯。這會(huì)使傳輸稍微變慢 ,也會(huì)損壞數(shù)據(jù),使文件變得不能用。(在大多數(shù)計(jì)算機(jī)上,ASCII方式一般假
設(shè)每一字符的第一有效位無意義,因?yàn)锳SCII字符組合不使用它。如果你傳輸二進(jìn)制文件,所有的位都是重要的。)如果你知道這兩臺(tái)機(jī)
器是同樣的,則二進(jìn)制方式對(duì)文本文件和數(shù)據(jù)文件都是有效的。
========
實(shí)驗(yàn) FTP協(xié)議分析
一、實(shí)驗(yàn)?zāi)康?
分析FTP報(bào)文格式和FTP協(xié)議工作過程。
二、實(shí)驗(yàn)內(nèi)容
試驗(yàn)主要分析FTP報(bào)文格式和FTP協(xié)議的工作過程。
三、實(shí)驗(yàn)環(huán)境和分組
l???????? 三層交換機(jī)2臺(tái),標(biāo)準(zhǔn)網(wǎng)線4根,console線4條,計(jì)算機(jī)4臺(tái);
l???????? 每4名同學(xué)為一組,其中每2名同學(xué)作為一個(gè)小組,每小組共同配置1臺(tái)交換機(jī)。
四、實(shí)驗(yàn)組網(wǎng)
五、實(shí)驗(yàn)步驟
步驟 1 按照?qǐng)D5-9 所示連接各個(gè)試驗(yàn)設(shè)備正確配置PCA和PCB的IP地址。交換機(jī)的配置命令如下:
<Quidway>system
[Quidway]vlan 2
[Quidway-vlan 2]port e 0/1
[Quidway-vlan 2]port e 0/2??????????? //在交換機(jī)上建立Vlan2并加入E0/1、E0/2端口
[Quidway-vlan 2]inter vlan 2????? ?
[Quidway-Vlan-interface2]ip address 192.168.1.10 255.255.255.0? //配置Vlan2的IP地址
步驟 2 將交換機(jī)配置成FTP服務(wù)器,以便使用Ethereal截獲報(bào)文。配置命令如下:
[Quidway]ftp server enable????? //將交換機(jī)的FTP服務(wù)打開
?% Start FTP server
[Quidway]local-user user_a????? //添加用戶user_a
?New local user added
[Quidway-user-user_a]pass simple abc???? //設(shè)定登錄密碼 abc
[Quidway-user-user_a]service-type ftp???? //設(shè)定服務(wù)類型
步驟 3 在每臺(tái)計(jì)算機(jī)上運(yùn)行Ethereal,開始監(jiān)測(cè)。
步驟 4 單擊“開始/運(yùn)行”,在“運(yùn)行”框中輸入cmd命令,打開命令行窗口。
步驟 5 在命令行窗口中,登錄FTP服務(wù)器,根據(jù)步驟2中的配置信息輸入用戶名和密碼。參考命令如下:
C:/>ftp???????????????????? //打開FTP
ftp> open 192.168.1.10??????? // 登錄服務(wù)器
User(192.168.1.10:none)):user_a?????? //輸入用戶名
Password:?????????????????????? //輸入用戶密碼,密碼不顯示
如果在超級(jí)終端上出現(xiàn)如下內(nèi)容:
%Sep 25 20:01:54 2003 Quidway FTPS/5/USERIN:Slot=1;User user_a(192.168.1.22)login succeeded
證明登錄成功。
步驟 6 在命令行窗口中,查看FTP服務(wù)器文件夾中的內(nèi)容。命令:
//執(zhí)行上面命令后。看到了多少文件?填入試驗(yàn)報(bào)告中。
ftp>dir
答:以下為輸出結(jié)果:從中可以看到有2個(gè)文件。
200 Port command okay.
150 Opening ASCII mode data connection for *.
-rwxrwxrwx?? 1 noone??? nogroup?? 3483804 Nov 22? 2003 S3526-S3526FM-S3526FS-VRP
310-0012.app
-rwxrwxrwx?? 1 noone??? nogroup???????? 4 Dec 27 15:15 snmpboots
226 Transfer complete.
ftp: 160 bytes received in 0.00Seconds 160000.00Kbytes/sec.
步驟 7 在命令行窗口中,退出FTP程序。命令:
ftp> quit
這時(shí),在超級(jí)終端上出現(xiàn)如下內(nèi)容:
?%Sep 25 20:03:48 2003 Quidway FTPS/5/USEROUT:Slot=1;User user_a(192.168.1.22)left
證明用戶user_a已經(jīng)退出。
步驟 8 停止Ethereal截獲報(bào)文,分析已經(jīng)截獲的報(bào)文。
(1)?????????????? 將截獲的報(bào)文命名為FTP-學(xué)號(hào),并上傳到FTP服務(wù)器的“網(wǎng)絡(luò)試驗(yàn)/應(yīng)用層試驗(yàn)”目錄下。
(2)?????????????? 分析FTP報(bào)文的格式。指出在截獲的報(bào)文中含有用戶名的報(bào)文序號(hào),以及含有密碼信息的報(bào)文。
答:在截獲的報(bào)文中含有用戶名的報(bào)文序號(hào)為137,含有密碼信息的報(bào)文序號(hào)為140。
(3)?????????????? 對(duì)截獲的報(bào)文進(jìn)行綜合分析,觀察FTP協(xié)議的工作過程,分析控制連接和數(shù)據(jù)連接是如何工作的。
答:先是FTP 服務(wù)器準(zhǔn)備完畢,用戶輸入用戶名和密碼后等待服務(wù)器回應(yīng)。回應(yīng)后,服務(wù)器允許用戶登陸進(jìn)行數(shù)據(jù)操作。之后用戶退出
服務(wù)器,服務(wù)器關(guān)閉。
六、實(shí)驗(yàn)總結(jié)
??????? 通過本次試驗(yàn),我初步分析了FTP報(bào)文格式和FTP協(xié)議的工作過程。在通過FTP協(xié)議進(jìn)行數(shù)據(jù)傳輸時(shí),必須先建立控制連接,再建
立數(shù)據(jù)連接,明白了其中的過程。
思考:ftp是屬于應(yīng)用層的協(xié)議,它用到的是哪個(gè)端口?網(wǎng)絡(luò)層給它提供了什么樣的服務(wù)?(協(xié)議是水平的,服務(wù)是垂直的)。你能從你
捕獲到的數(shù)據(jù)包中分析出tcp建立鏈接、釋放鏈接的過程嗎?
========
總結(jié)