1. 程式人生 > >FTP協議的粗淺學習--利用wireshark抓包分析相關tcp連接

FTP協議的粗淺學習--利用wireshark抓包分析相關tcp連接

sha ftp命令 動向 c中 細胞 nsf ref 後退 圖片

一、為什麽寫這個

昨天遇到個ftp相關的問題,關於ftp匿名訪問的。花費了大量的腦細胞後,終於搞定了服務端的配置,現在客戶端可以像下圖一樣,直接在瀏覽器輸入url,即可直接訪問。

期間不會彈出輸入用戶名密碼來登錄的窗口。

技術分享圖片

今天我主要是有點好奇,在此過程中,究竟是否是用匿名賬戶“anonymous”該賬戶登錄了,還是根本不需要登錄呢?

於是用wireshark抓包了一下。

二、抓包過程

我這邊直接用了捕獲過濾器抓本機和ftp之間的包。抓包後直接ctrl+F進行文本查找。

果然發現是發送了USER anonymous命令的。

技術分享圖片

三、ftp的基礎知識

來源於:https://blog.csdn.net/iloli/article/details/5805262

FTP是File Transfer Protocol(文件傳輸協議)的縮寫,用來在兩臺計算機之間互相傳送文件。相比於HTTP,FTP協議要復雜得多。復雜的原因,是因為FTP協議要用到兩個TCP連接,一個是命令鏈路,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據鏈路,用來上傳或下載數據。

FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。

PORT(主動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT命令告訴服務器:“我打開了XXXX端口,你過來連接我”。於是服務器從20端口向客戶端的XXXX端口發送連接請求,建立一條數據鏈路來傳送數據。


PASV(被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端:“我打開了XXXX端口,你過來連接我”。於是客戶端向服務器的XXXX端口發送連接請求,建立一條數據鏈路來傳送數據。

總結來說,主動模式時,由客戶端提供數據傳輸端口。。被動時,由服務器端提供數據傳輸的端口。

四、ftp基礎的幾個命令進行抓包分析

1、操作記錄

在windows的cmd裏面,一般默認就是有ftp命令的。

操作步驟很簡單,只是匿名用戶登錄,查看目錄下文件,然後退出登錄。

技術分享圖片

2、抓包分析

2.1建立連接

前面幾個抓包為建立連接。

技術分享圖片

然後是服務端發回的響應:(請求的包沒看到,不知道是不是對應我上面的ftp 10.10.20.2操作)

技術分享圖片

2.2登錄操作:

技術分享圖片

然後是登錄成功的響應:

技術分享圖片

2.3 ls命令請求包

接下來是ls命令觸發的一個包:

該包主要是客戶端向服務端發起的一個請求。

當 PORT 命令被提交時,它指定了客戶端(10.15.4.46)上的一個端口而不是服務器的。

該端口號的計算規則就是:211*256 + 220 = 54236,211與220也就是下面紅框標識出來的數字的最後兩位.

技術分享圖片

下面是服務器端的響應,表示連接已建立。再下面一條是客戶端發送的ls命令,查看目錄下的文檔。

技術分享圖片

2.4 服務端建立單獨連接來發送ls的返回數據

再下來是服務端要返回數據了,於是主動向客戶端的54236端口請求建立tcp連接。(就是上面計算出來的那個)

技術分享圖片

見下圖,這期間,夾雜了原有的21端口與客戶端的連接的響應消息。

技術分享圖片

2.5 ls的數據傳輸及連接斷開

連接斷開分了兩部分,一部分是ftp層面的。一部分是tcp層面的連接斷開。

其中tcp連接斷開由服務器端發起。

技術分享圖片

五、個人一點感悟

以前面試騰訊時,被問過tcp粘包相關的問題。問到說ftp是怎麽解決粘包的。

當時沒答上來。後來才知,ftp的每個包都在包的結尾用了\r\n進行標識。

如下:

技術分享圖片

其中的0d、0a在asicc中就是回車、換行的意思。

六、一些參考資料

Wireshark數據抓包分析之FTP協議

深入理解ftp協議

ftp兩種模式詳解

FTP協議的粗淺學習--利用wireshark抓包分析相關tcp連接