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

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

一、為什麼寫這個

昨天遇到個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中就是回車、換行的意思。

 六、一些參考資料