1. 程式人生 > >wireshark過濾表示式&wireshark捕獲ftp協議分析

wireshark過濾表示式&wireshark捕獲ftp協議分析

本文的主題,記錄學習Wireshark的一些問題。首先Wireshark是一個網路封包分析軟體,其功能是擷取網路封包,並儘可能顯示出最為詳細的網路封包資料,你可以把它想像成 “電工技師使用電錶來量測電流、電壓、電阻” 的工作 - 只是將場景移植到網路上,並將電線替換成網路線。

網上下載好wireshark一路預設前進安裝後就可以進入wireshark,我們可以看到主要介面大概是這樣的。如果底下顯示“找不到介面”,你可以嘗試管理員開啟wireshark解決。
這裡寫圖片描述

選擇無線網就可以看到一個吊炸天的介面(當然大家對應自己想捕獲的網路進行選擇)

這裡寫圖片描述
我們用wireshark的目的是捕獲資料包再做後續處理(瞭解還不深入,更多的作用以後用到了再和大家分享),所以現在出現了這麼一大堆結果難道要我們在MMP的九千多行中找結果嗎,肯定不是哇,所以進入第一個知識點Wireshark過濾表示式。

一、過濾表示式
這裡寫圖片描述
在頂上有一個搜尋欄就是我們寫過濾表示式的地方。主要實用有針對性的一些過濾表示式有按協議過濾;按目的埠過濾;按源IP地址過濾;按目的MAC地址過濾;針對長度和內容的過濾等,我們逐個說明,讀者可以在自己wireshark進行實驗(有點像在寫sql的where語句,對的語句搜尋欄是綠色的,有錯誤就是紅色的)。

1、針對IP地址的過濾
Cmd輸入ipconfig
這裡寫圖片描述
(1)對源地址為10.136.157.37的包的過濾,即抓取源地址滿足要求的包。
表示式為:ip.src ==10.136.157.37
(2)對目的地址為10.136.157.37的包的過濾,即抓取目的地址滿足要求的包。
表示式為:ip.dst ==10.136.157.37
(3)對源或者目的地址為10.136.157.37的包的過濾,即抓取滿足源或者目的地址的ip地址是10.136.157.37的包。
表示式為:ip.addr ==10.136.157.37或者ip.src ==10.136.157.37 or ip.dst ==10.136.157.37
(4)要排除以上的資料包,我們只需要將其用括號囊括,然後使用 “!”或者”not”即可。
表示式為:!(表示式) not(表示式)
這裡寫圖片描述


2、針對協議的過濾
(1)僅僅需要捕獲某種協議的資料包,表示式很簡單僅僅需要把協議的名字輸入即可。
表示式為:http
(2)需要捕獲多種協議的資料包,也只需對協議進行邏輯組合即可。
表示式為:http or telnet (多種協議加上邏輯符號的組合即可)
(3)排除某種協議的資料包
表示式為:not arp or !tcp
這裡寫圖片描述

3、針對埠的過濾(視協議而定)
(1)捕獲某一埠的資料包
表示式為:tcp.port == 80
(2)捕獲多埠的資料包,可以使用and來連線,下面是捕獲高階口的表示式
表示式為:udp.port >= 2048
這裡寫圖片描述

4、針對長度和內容的過濾
(1)針對長度的過慮(這裡的長度指定的是資料段的長度)
表示式為:udp.length < 30 http.content_length <=20
(2)針對資料包內容的過濾
表示式為:http.request.uri matches “blog” (匹配http請求中含有vipscu欄位的請求資訊)
這裡寫圖片描述

5、過濾目的Mac地址
在cmd輸入ipconfig/all得到mac地址,即實體地址
這裡寫圖片描述

表示式為:eth.addr==DC-85-DE-F2-06-7D
這裡寫圖片描述

6、過濾出MAC地址為本機MAC地址,IP地址為非本機IP地址的資料包。
表示式為:eth.addr== DC-85-DE-F2-06-7D and ip.addr != 10.136.157.37
這裡寫圖片描述

二、利用wireshark捕獲ftp的協議互動過程並對此進行分析

接下來我們乾點有意思的事情。
首先插個話題,很多人可能想知道如何在本機上搭建ftp伺服器。本人win8系統,搭建方法如下:
1.開啟“控制面板“,進入“程式”
這裡寫圖片描述

2.找到“啟用或關閉windows功能”,點選開啟
這裡寫圖片描述

3.在“windows功能”中找到“Internet資訊服務”,並選中“FTP服務”、“FTP擴充套件性”和“IIS管理控制檯”前的複選框,點選“確定”
等待成功後,在開始螢幕的搜尋中輸入“IIS”,然後點選開啟“IIS管理器”
這裡寫圖片描述

4.在左欄的“網站”上點選右鍵,開啟“新增FTP站點”,填寫相應資訊。其中,站點名隨意設定,物理路徑就是本機電腦上的一個目錄,ip地址可設為自己此時的ip地址。其他勾選可以參照自己需求。
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

5.點選完成就在本機上搭建了一個ftp站點。你可以開啟瀏覽器輸入ftp://剛剛輸入的ip地址訪問。

//——————————————蜜汁分割線——————————————

我們進入正題,開啟wireshark,我們以訪問ftp.nankai.edu.cn並下載一個檔案為例看看在檔案傳輸過程中發生了什麼。

首先我們開啟wireshark,開啟捕獲器,輸入ip.src ==10.136.157.37 or ip.dst ==10.136.157.37(10.136.157.37改為大家自己的ip,還可以加上“and (tcp or ftp or ftp-data)”)進行監聽。
開啟cmd,輸入ftp ftp.nankai.edu.cn,這時候看wireshark那邊可以看到捕獲了四個tcp報文和一個ftp報文。這是著名的“三次握手”嘛,不對為啥有四個tcp報文?仔細分析一下,先是客戶(我的ip)給伺服器(南開的這個ip)傳送一個請求報文,之後伺服器回覆一個ACK報文併為這次連線分配資源,而我們客戶端也回覆了一個ACK報文併為這次連線分配資源,於是我們收到了伺服器發來的ftp報文來歡迎我們“welcome to nankai ftp service”,接到伺服器這個報文後客戶端又發給伺服器一個ACK報文,注意這個報文我們發現和上一個發過去的ACK報文作用應該是一樣的,只是明確一下客戶端這邊建立好連線了,準備傳送東西了,所以應該是迴應了一下伺服器發來的ftp檔案而已,還是三次握手。
這裡寫圖片描述
總結一下:
TCP/IP協議中,TCP協議提供可靠的連線服務,採用三次握手建立一個連線
(1)第一次握手:建立連線時,客戶端A傳送SYN包(SYN=j)到伺服器B,並進入SYN_SEND狀態,等待伺服器B確認。
(2)第二次握手:伺服器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也傳送一個SYN包(SYN=k),即SYN+ACK包,此時伺服器B進入SYN_RECV狀態。
(3)第三次握手:客戶端A收到伺服器B的SYN+ACK包,向伺服器B傳送確認包ACK(ACK=k+1),此包傳送完畢,客戶端A和伺服器B進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與伺服器開始傳送資料。
確認號:其數值等於傳送方的傳送序號 +1(即接收方期望接收的下一個序列號)。

用的一張圖感受一下
這裡寫圖片描述

好的,揮別三次握手,再次來到cmd,我們使用匿名訪問南開ftp站點,使用者輸入anonymous,cmd這邊告訴我們“230 Login successful”。我們來看看wireshark,發現這次我們客戶端在上邊已經告訴伺服器我們要發東西了的情況下果不其然丟出一個ftp報文,帶著我們的使用者號一起給到了伺服器端,於是對面來了一個ACK報文帶著FTP報文傳來,也就是我們在cmd看到的那個訊息。然後,我們又發了一個ACK報文過去,當然作用和剛剛說的一樣,“大哥我們還沒死呢,你繼續等著我的訊息哈”。
這裡寫圖片描述
這時我們點選重新捕獲的按鈕,接下來好好看看下載檔案時傳輸線上發生了什麼。在下載檔案前,先做好一些準備工作,首先cmd中輸入dir可以看看站點資源,我選擇了index.html檔案一會下載。然後cmd鍵入‪lcd C:\Users\as\Desktop\yao把下載地址定在目標位置。接下來我們開始捕獲。在cmd鍵入get index.html,轉身看看這邊wireshark,霎時間捕獲了一堆東西,主要包含的協議有tcp、ftp和ftp-data。我們仔細分析一下。

首先我們發現前三個FTP報文出現兩個關鍵字PORT和PASV,這是什麼呢?百度百科一下:
PORT(主動)方式的連線過程是,伺服器開放一個埠,通知客戶端連線,服務端接受連線,建立一條命令鏈路。當需要傳送資料時,客戶端在命令鏈路上用PORT命令告訴伺服器:“我打開了一個1024+的隨機埠,你過來連線我”。於是伺服器從20埠向客戶端的1024+隨機埠傳送連線請求,建立一條資料鏈路來傳送資料。
PASV(被動)方式的連線過程是:客戶端向伺服器的FTP埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時,伺服器在命令鏈路上用 PASV命令告訴客戶端:“我打開了一個1024+的隨機埠,你過來連線我”。於是客戶端向伺服器的1024+埠傳送連線請求,建立一條資料鏈路來傳送資料。

所以這一段互動就是我們像南開站點發了一個port請求,伺服器接受請求順便告訴我們“port請求我們收到啦,不過建議你們用pasv比較好啊”,然後我們像伺服器發出RETR(retireve)請求下載index.html,於是伺服器發來報文,內容就是百科裡說的,“我(伺服器)開放了一個埠,你可以來連線了”,我們反手就是一個報文回覆“連線上啦哈”,於是伺服器又發了一個ftp的報文作為迴應“我們伺服器端用二進位制方式來對index.html檔案進行資料傳輸PS.它有41495bytes這麼大”,並且發來ACK報文建立連線。這之後,很明顯,index.html這個檔案被分成了好多個小號檔案以ftp-data方式傳輸過來,過程中還出現了一下ACK的報文我想應該是重新確認一下連線的作用。

這裡寫圖片描述

當所有ftp-data的報文發完以後,也就是檔案傳輸完成時候,伺服器發來報文告訴我們“所有檔案都傳完啦”,並且直接有扔過來一個ACK報文,我們客戶端也丟回去一個ACK報文,虛晃一槍“大哥謝謝啦,你等等別走我看看還有沒需求要找你”

這裡寫圖片描述

實驗做完了當然沒需求啦,所以我們cmd鍵入quit要斷開連線,得到迴應goodbye。很牛逼,我們看看wireshark那邊,先是兩個ftp互相告別,接下來就是著名的“四次揮手”。四個TCP一字排開,先是伺服器發來了一個FIN,ACK報文告訴對面我不會再讀你給我發的訊息了,接著我們客戶端知道後憤怒地甩回去一個ACK報文告訴伺服器“你行,我們熱臉不貼冷屁股,既然你不聽我也不給你發訊息了”。還沒完,氣還沒消我們客戶端也丟過去一個FIN,AVK報文,告訴對面禮尚往來,我也不會再鳥你的訊息了,作為聊天的最後,伺服器來了個最後的了結“斷絕一切聯絡,我再給你發訊息我就不是一個好的伺服器!”。

嗯,然後嘛他們就失憶了,下一次我們找伺服器大哥還是能握握手成為好朋友。

這裡寫圖片描述

再來總結一下:
由於TCP連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送一個FIN來終止這個方向的連線。收到一個 FIN只意味著這一方向上沒有資料流動,一個TCP連線在收到一個FIN後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
TCP的連線的拆除需要傳送四個包,因此稱為四次揮手(four-way handshake)。客戶端或伺服器均可主動發起揮手動作,在socket程式設計中,任何一方執行close()操作即可產生揮手操作。
(1)客戶端A傳送一個FIN,用來關閉客戶A到伺服器B的資料傳送。
(2)伺服器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將佔用一個序號。
(3)伺服器B關閉與客戶端A的連線,傳送一個FIN給客戶端A。
(4)客戶端A發回ACK報文確認,並將確認序號設定為收到序號加1。

再用一張圖讓大家看的更直觀
這裡寫圖片描述

這就是這次wireshark抓ftp包的實驗全過程和分析內容啦。

That’s all thank you