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中就是回車、換行的意思。
六、一些參考資料
Wireshark數據抓包分析之FTP協議
深入理解ftp協議ftp兩種模式詳解
FTP協議的粗淺學習--利用wireshark抓包分析相關tcp連接