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