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


FTP相關文章:

Linux上的ftp服務器 vsftpd 之配置滿天飛--設置匿名用戶訪問(不彈出用戶名密碼框)以及其他用戶可正常上傳

 

一、為什么寫這個

昨天遇到個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兩種模式詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM