1. 程式人生 > >Wireshark之FTP協議分析(二)

Wireshark之FTP協議分析(二)

以實際抓包來分析ftp協議,加深理解。

環境:

win7電腦+linux裝置,linux裝置為ftp服務端,win7電腦通過WinSCP的ftp主動方式(我得版本winscp預設是被動方式,需要從高階選項修改)來連線ftp服務端。

過程:

電腦(192.168.3.206)與裝置建立ftp(192.168.3.100)連線,然後電腦向裝置傳輸一個2084位元組的檔案。然後電腦主動關閉連線。

裝置上進行抓包,只抓取tcp port 20和21的報文。

實際抓包報文如下(一個一個包來分析):

第1-3包為tcp的三次握手,服務端埠21,即ftp控制連線建立;

第4包為服務端應答客戶端報文,220:服務就緒,附加引數為服務端ftp版本號;

第5包客戶端傳送請求認證使用者名稱,命令USER,引數實際使用者名稱;

第6包為服務端tcp ack迴應包;

第7包為服務端對客戶端USER命令的應答,331:要求密碼;

第8包客戶端像服務端傳送密碼,命令PASS,後跟明文密碼;

第9包為服務端tcp ack迴應包;

第10包為服務端對客戶端PASS命令的應答,230:登入成功;

第11包為客戶端像服務端請求系統版本,命令SYST;

第12包為服務端tcp ack迴應包;

第13包為服務端對客戶端SYST命令的應答,215:系統名;

第14包為客戶端向服務端請求服務端採用的特性列表,命令FEAT;

第15包為服務端對客戶端命令FEAT的應答,211:系統狀態回覆;

第16-24包為服務端應答回覆;

第25、26包為客戶端tcp ack包;

第27-38包為客戶端指定UTF8格式、獲取伺服器目錄並切換命令及服務端的應答,不再贅述;

第39包為客戶端向服務端請求LIST命令;

第40-42為服務端與客戶端的資料連線建立(注意:是服務端發起的連線請求),服務端埠為20,連線的客戶端埠為192*256+13(根據第37包客戶端PORT給服務端的埠,計算公式為256*倒數第二位+倒數第一位)

第43-44包為服務端開始向客戶端傳送檔案列表,注意只有實際列表傳送走的資料連線,即第44包,第43包還是控制連線;

第45-47包為tcp 四次揮手包(剩餘兩個揮手包為第49、50包),從這可以看出檔案列表傳送完畢,資料連線立馬關閉;

第52-68包又是一次客戶端獲取服務端列表的通訊過程,可以看到又經歷了一次建立資料連線並關閉的過程,不在贅述;

第68-89包為客戶端向服務端傳送檔案的過程,先是確定為二進位制模式,傳輸檔案為sysctl.conf檔案,然後建立資料連線進行傳輸,實際傳送資料大小為2084位元組,然後關閉資料連線;

第86包服務端應答傳輸完成;

第88包客戶端向服務端傳入檔案的修改時間,這裡不清楚為啥是20171115,明明是2018年;

第89包服務端應答客戶端檔案時間已修改;

第90-106包又是一次檔案列表的獲取過程,不再贅述;

第107-109為客戶端主動斷開與服務端的ftp連線的四次揮手包(鬧麼為啥只抓到三個包。。。);

四次揮手注意的是,因為資料連線採用的是服務端主動連線的,而控制連線為客戶端主動連線的,屢一下,ftp客戶端與服務端是針對控制連線而言的。資料連線主動模式下,實際是服務端充當客戶端,不講了有點亂,睡覺~~~