FTP工作過程的抓包分析
其實這個是我在寫C#FTP程式設計時,總感覺寫的時候模稜兩可的,就姑且抓包看看,到底什麼情況。
第一次使用抓包工具,暫且做簡單的分析吧
我在本機登陸ftp,輸入使用者名稱,密碼進行登入。對該過程,使用 CommView獲得抓包資料如下。(點選圖片檢視大圖)
看來整個過程還是比較複雜的,進行了這麼多次通訊。那麼就逐條來看吧
第一條,下邊是給出的資料包資料分析,這次連線應該是由客戶端發出的,一次TCp請求,外層先經過了MAC層的包封裝,然後IP層封裝,TCP層封裝。各個層中包含不同的資料,這裡就不細說了。不過發現,點這個樹狀資料時,左邊的二進位制資料有對應的高亮顯示,挺好。
第二條,看來是從伺服器端傳來的資訊,。想到了TCP的連線不是三次握手麼,這應該就是第二次握手了。那麼第三條資料就毫無疑問就是客戶端高速伺服器端已經建立好了連線,可以傳送資料了。
第三條,依然是三層封裝
客戶端應該已經將發起了的3716埠與伺服器端的21的控制連線。
第四條
從圖上看出來,這是從伺服器端傳送過來的,右邊的樹狀資料分析欄 也有了基於FTP層協議資料的封裝(大概是這麼說吧。。。)。從狀態號220看出,這次通訊是說,伺服器端高速客戶端,對新使用者的服務已經建立完畢了。而且還給出了伺服器端的服務型別。
客戶端的3716埠與伺服器端的21埠連線建立成功。
第五條
大家可能看到,埠程式設計了3716 原來是3715,應該是因為我進行了兩次操作?因為從資料包上看,3716埠也進行了以上的四次通訊,那麼就從3716這分析(3715資料包沒有3716的全。。。)。
這一條可以看出來是客戶端向伺服器端傳送了USER命令,這個命令是高速伺服器,我要傳送使用者名稱了。書上說這是機那裡控制連線後發出的第一個命令。如果以後要改變登入的使用者,會重新發送該命令,原來設定的引數不會改變。命令後邊緊跟著我輸入的ftp使用者名稱稱。
第六條
這一條是伺服器端傳送來的,響應碼為331,可知,服務端告訴客戶端使用者名稱正確,需要口令。從這裡可以看出,當焦點離開使用者名稱輸入框時,客戶端已經於伺服器端建立了一次通訊。那麼,此時就能夠判斷該使用者是否合法。響應碼後邊直接跟著該響應碼所表達的意義(我原來以為相應碼錶示的意義並不傳送)。
第九條
這條是客戶端向伺服器端傳送PASS命令,後邊緊跟著傳送密碼(居然是明碼,汗。。。。。)那麼服務端肯定會根據前後傳送的使用者名稱和密碼,進行驗證。
第十條
響應碼230,說明使用者憑據有效,登入成功。
第十一條,第十二條
客戶端傳送了一個opt命令,結果伺服器端告訴客戶端,該命令不識別。不知道這是什麼情況。。。
第十二條,十三
客戶端發出sys命令,因該是詢問作業系統型別,書上說是詢問名字系統型別。。。伺服器反饋Windows_NT。
第十四,十五
客戶端傳送site命令,伺服器端反饋一大堆資訊,從comment上看,是幫助資訊。
第十六,十七
客戶端端傳送命令 PWD,伺服器端反饋257(書上解釋:建立PATHNAME。。。)comment上寫著“/”is curent directory 說明的是根目錄。
第18,19
客戶端傳送TYPE命令,Represention type寫著A,伺服器端 返回200 Type set to A. A指的是Ascall編碼模式。可以使用tye命令實現ASCALL和二進位制模式之間的變換。
第20,21
客戶端傳送命令PASV,伺服器端響應為227.表示進入被動模式。
服務端收到該命令後會開一個新的埠P進行監聽,同時將該埠告訴客戶端。客戶端收到響應後,通過新的埠3617與P建立連線,進行檔案傳輸。該3717會告訴服務端。
關於被動模式與主動模式書上這麼解釋來著。
客戶端與伺服器建立控制連線後,要告訴伺服器採用哪種檔案傳輸模式。FTP提供了兩種傳輸模式,一種是Port(主動模式),一種是Passive被動模式。這個主被動指的是伺服器端。
主動,是指伺服器端主動向客戶端發起資料連線請求,那麼此時伺服器端要用自己的一個固有埠一般是20去監聽客戶端。整個過程是這樣的,客戶端在最初 會用一個埠3716向伺服器端的21發起控制連線請求(應該是在握手後中確定的吧),連線成功後,在傳送port 3716+1,告訴服務伺服器端堅定3717,那麼伺服器端就會用資料埠,一般是20與3717建立連線(這就是主動進行資料連線)。伺服器端利用自己的20與客戶端 3717來檔案的資料傳送通訊,利用21和客戶端最初的埠3616進行使用者驗證和管理。
而被動模式,是伺服器端被動的接受客戶端的資料連線請求,這個埠號是由客戶端告知伺服器端的,在本地隨機生成(1025-65535)。
那麼現在的情況就是,客戶端已經告訴服務端進入被動模式了,客戶端應該啟動新埠,建立資料連線了。
第22,23,24
可以看出3717應該就是資料連線了。不過,暫時還不知道,客戶端如何利用 該埠與服務端P建立連線的,這個內容封裝在 哪裡邊??
25
客戶端發出list命令,告知服務端列出路徑下目錄和檔案。
26,27
接下來有兩次資料埠的通訊,此時都沒有ftp資料資訊,傳送的資料資訊應該在tcp資料段中。可如何轉給3617呢??
28
服務端告知,資料開始傳送。
29,30,31
接下來有三次資料埠的通訊,兩次是由客戶端發出的,一次是服務端返回的資訊。
32,33
客戶端控制埠與服務端控制埠通訊,服務端返回,資料傳輸完畢。
這就是整個過程。
不清楚的是如何才能看到中間資料埠通訊時的資料呢??