1.簡介
前邊已經介紹過兩款抓包工具,應該是夠用了,也能夠處理在日常工作中遇到的問題了,但是還是有人留言讓宏哥要講解講解Wireshark這一款抓包工具,說實話宏哥之前也沒有用過這款工具,只能邊研究邊分享。換句話說就是現學現賣,希望大家不要介意,宏哥這裏的分享僅供你參考學習,有錯誤的地方也歡迎你指出。你自己也可以深入的研究一下。
2.軟件介紹
Wireshark(前稱Ethereal)是一款免費開源的網絡嗅探抓包工具,世界上最流行的網絡協議分析器!網絡封包分析軟件的功能是擷取網絡封包,並儘可能顯示出最爲詳細的網絡封包資料。Wireshark網絡抓包工具使用WinPCAP作爲接口,直接與網卡進行數據報文交換,可以實時檢測網絡通訊數據,檢測其抓取的網絡通訊數據快照文件,通過圖形界面瀏覽這些數據,可以查看網絡通訊數據包中每一層的詳細內容。它的強大特性:例如包含有強顯示過濾器語言和查看TCP會話重構流的能力,支持幾百種協議和流媒體類型。
網絡封包分析軟件的功能可想像成 "電工技師使用電錶來量測電流、電壓、電阻" 的工作 - 只是將場景移植到網絡上,並將電線替換成網絡線。在過去,網絡封包分析軟件是非常昂貴的,或是專門屬於營利用的軟件。Ethereal的出現改變了這一切。在GNUGPL通用許可證的保障範圍底下,使用者可以以免費的代價取得軟件與其源代碼,並擁有針對其源代碼修改及客製化的權利。Ethereal是目前全世界最廣泛的網絡封包分析軟件之一。
Wireshark 在網絡排障中使用非常頻繁,顯示了網絡模型中的第 2 層到第 5 層(鏈路層、網絡層、傳輸層、應用層),不管是網絡工程師、網絡安全工程師、黑客、軟件開發工程師,平時都會用到Wireshark。
3.WireShark簡史
1997年,Gerald Combs 需要一個工具追蹤網絡問題,並且想學習網絡知識。所以他開始開發Ethereal (Wireshark項目以前的名稱) 以解決自己的需求。
1998年,Ethreal0.2.0版誕生了。此後不久,越來越多的人發現了它的潛力,併爲其提供了底層分析。
Wireshark 是一款免費開源的數據包嗅探器/分析器,可用於捕獲網絡上的數據包。Wireshark 最初的版本叫做 Ethereal,由 Gerald Combs 於1998年發佈,Wireshark 軟件和官網上都可以看到他的名字排在首位:
2006年5月,Gerald Combs前往CACE Technologies工作,但是他沒能拿到 Ethereal 的商標權。爲了保證項目成功運行下去,Combs 和他的開發團隊在 2006 年年中將這個項目重新命名爲 Wireshark。
隨着 Combs 和其他貢獻者在接下來十幾年內持續維護 Wireshark 的代碼併發布新版本,Wireshark 已經成爲世界上最流行的數據包分析/嗅探軟件之一。
上述的 Wireshark 歷史在網絡上很容易查到,但是這些資料並未提及 Combs 爲何要將該軟件取名爲 Wireshark(如果有讀者能找到請在評論區指出)。
不過官網上有這樣一個問題可以參考:
這個回答中的 carcharodon 無疑讓人想起了最有名的鯊魚——大白鯊 (Carcharodon carcharias)。大家都知道鯊魚具有極其靈敏的嗅覺,能在幾公里外嗅到受傷的獵物,用 shark來命名數據包嗅探器真是再合適不過了。
連 Wireshark 圖標都是鯊魚鰭的形狀,如下圖所示:
2008年,在經過了十年的發展後,Wireshark發佈了1.0版本。
4.WireShark可以做什麼
簡而言之,WireShark主要作用就是可以抓取各種端口的報文,包括有線網口、無線網口、USB口、LoopBack口等等,從而就可以很方便地進行協議學習、網絡分析、系統排錯等後續任務。
支持實時捕獲數據並保存爲pcap文件
支持從已經捕獲的數據包中讀取數據;
支持超過1000種標準/專用協議解析
支持創建插件解析私有協議;
支持使用捕獲和顯示過濾器細化數據;
支持TLS協議解密(設置比較複雜,不如使用charles/burp/fidder方便)
上邊說了一堆,換句話主要就是三點:
①分析網絡底層協議,
②解決網絡故障問題,
③找尋網絡安全問題。
5.Wireshark不能做的
爲了安全考慮,wireshark只能查看封包,而不能修改封包的內容,或者發送封包。
不支持編輯修改數據包(需要編輯數據包建議使用 WireEdit)
不支持入侵/檢測異常流量
6.Wireshark VS Fiddler
Fiddler是在windows上運行的程序,專門用來捕獲HTTP,HTTPS的。
wireshark能獲取HTTP,也能獲取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的內容。
7.同類的其他工具
1.微軟的network monitor
2.Sniffer
3.Omnipeek
4.Fiddler
5.Httpwatch
6.科來網絡分析系統
8.什麼人會用到wireshark
1. 網絡管理員會使用wireshark來檢查網絡問題
2. 軟件測試工程師使用wireshark抓包,來分析自己測試的軟件
3. 從事socket編程的工程師會用wireshark來調試
4. IT運維工程師
5.網絡工程師
6.安全工程師
7.聽說,華爲,中興的大部分工程師都會用到wireshark。
總之跟網絡相關的東西,都可能會用到wireshark。
9.平臺支持
Wireshark可以在以下平臺運行:
①Windows
②MacOS
③Linux/Unix
10.相關網址
1.官網:https://www.wireshark.org/
2.書籍:http://www.wiresharkbook.com/
3.維基文檔:https://wiki.wireshark.org/
11.Wireshark抓包原理
Wireshark使用WinPCAP作爲接口,直接與網卡進行數據報文交換。Wireshark使用的環境大致分爲兩種,一種是電腦直連網絡的單機環境,另外一種就是應用比較多的網絡環境,即連接交換機的情況。
「單機情況」下,Wireshark直接抓取本機網卡的網絡流量;
「交換機情況」下,Wireshark通過端口鏡像、ARP欺騙等方式獲取局域網中的網絡流量。
端口鏡像:利用交換機的接口,將局域網的網絡流量轉發到指定電腦的網卡上。
ARP欺騙:交換機根據MAC地址轉發數據,僞裝其他終端的MAC地址,從而獲取局域網的網絡流量。
抓包原理分爲網絡原理和底層原理1.網絡原理: 1)本機環境-直接抓本機網卡進出的流量:直接在終端安裝ws,然後ws抓本機網卡的與互聯網通信的流量。 2)集線器環境(老網絡)-集線器:向其他所有端口都會泛洪,抓整個局域網裏面的包。
11.1網絡抓包原理
網絡中不論傳輸什麼,最終通過物理介質發送的都是二進制,類似於0101的Bit流。純文本(字符串)中文通常採用UTF-8編碼,英文用ASCII編碼;非純文本音頻、視頻、圖片、壓縮包等按不同編碼封裝好,轉換成二進制傳輸。在IP網絡中,通過Wireshark抓包,獲取的原始數據都是二進制。
哪種網絡情況下能夠抓取到包呢?下面結合網絡原理講解。網絡抓包主要存在三種情況:本機環境、集線器環境和交換機環境。
11.1.1本機環境
本機環境直接抓包本機網卡進出的流量。Wireshark會綁定我們的網卡,不需要藉助第三方設備(交換機、集線路由器)就能抓取我們的網絡通信流量,這是最基本的抓包方式。即直接抓取進出本機網卡的流量包。這種情況下,wireshark會綁定本機的一塊網卡。
11.1.2集線器環境
集線器環境可以做流量防洪,同一衝突域。集線器的英文是“Hub”,“Hub”是“中心”的意思,集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它爲中心的節點上。它工作於OSI參考模型第一層,即“物理層”。
假設三臺電腦通信,PC1處安裝Wireshark,當PC2、PC3發送數據包到集線器網絡裏面(衝突域或廣播域),由於集線器是物理層產品,不能識別MAC地址、IP地址,它會將接收包往其他所有接口泛洪,此時Wireshark就能抓到從同一個集線器其他電腦發過來的數據包,即局域網中的數據包。這是一種典型的老網絡做法,現在基本淘汰。
用於抓取流量泛洪,衝突域內的數據包,即整個局域網的數據包。
11.1.3交換機環境
交換機環境是更加常見的方式,包括端口鏡像、ARP欺騙、MAC泛洪。
11.1.3.1端口鏡像
交換機是一種數據鏈路層甚至網絡層的產品,它的轉包接包嚴格按照交換機上的MAC地址表通信。所以正常情況下,PC2和PC3通信流量是很難流到PC1的網卡上。當PC2和PC3通信時,PC1是無法通過Wireshark抓到包。但是我們可以在交換機端口做SAPN端口鏡像操作,它會將其他兩個口的流量複製一份到PC1處,PC1的網卡和Wireshark設置爲混插模式,此時就能進行抓包。該模式常用於很多付費的流量分析軟件。這種方式下,交換機嚴格按照tenlnet表和mac地址表進行轉發數據包。當pc2和pc3通信的時候,默認是pc1是無法抓取數據包的,但是可以通過在交換機上設置策略,即端口鏡像。這樣Pc2和Pc3通信的數據包就被複制一份到連接pc2的那個交換機端口,這樣pc2就可以抓取到Pc2和Pc3的通信數據包了。
11.1.3.2ARP欺騙
假設我們沒有權限在交換機上做端口鏡像技術,因爲有MAC地址表,又想獲取整個局域網中的流量,竊取到PC2、PC3上的流量。這可以通過著名的ARP攻擊軟件Cain&Abel實現,其流程是:
- 首先,PC2發送ARP請求廣播包,交換機收到包之後會發給PC1和PC3。
- PC1和PC3接收到,正常情況下PC1會丟棄該包,因爲詢問的是PC3,但ARP欺騙會回覆“我是IP3,對應地址爲MAC1”,這就是典型的ARP欺騙或ARP病毒。
- 最後PC2會將流量封裝成底層的MAC1回覆過去。如果PC3和PC1都回應,但APR有個特性叫後到優先,PC1會做一個錯誤的綁定,將數據包發到MAC1,從而導致PC2和PC3的通信流量都會經過PC1,這也是典型的流量劫持、局域網攻擊。
步驟如下:
(1)PC2想和PC3通信,故而向交換機發送廣播
(2)正常情況下PC1會將此包丟棄掉(因爲要找的不是它),但是這裏的PC1會進行ARP欺騙,告訴PC2它就是PC2要找的PC3
(3)因爲ARP後到優先的特性,PC2很大可能會認爲PC1的MAC地址是自己要找的PC3
(4)就這樣,PC2和PC3的通信就變成了PC2和PC1的通信了。
(5)至於後續PC1要不要把數據(可能被修改的數據)交給PC3,那完全取決於PC1的心情。
以上便是局域網ARP攻擊的典型情況。
11.1.3.3MAC泛洪
通過工具泛洪帶來大量垃圾包,產生大量MAC地址,此時交換機MAC地址表會變爲右邊這張表(爆表),MAC2和MAC3被擠出了MAC地址表。一旦這種MAC地址被擠出MAC地址表,按照交換機原理,如果收到的數據包是未知,它會對外泛洪,此時PC2和PC3對外流量泛洪。
這種情況下,PC1沒有端口鏡像的權限,所以它不能直接截取全網的流量,那麼該怎麼做呢?
(1)PC1發送大量垃圾包,這裏產生了大量的MAC地址,導致MAC表爆表
(2)PC2和PC3發出的數據找不到目的地址就會進行全網泛洪,被PC1截取全網流量
11.2底層原理
那麼,抓包的底層架構是怎樣的?下面開始講解Wireshark的底層原理。
底層原理:wireshark底層抓包工具。
12.wireshark整體架構
Wireshark包括5層架構:
最底層Win-/libpcap:wireshark底層驅動軟件,Wireshark抓包時依賴的庫文件(驅動文件、庫文件)
Capture:抓包引擎,利用libpcap/WinPcap底層抓取網絡數據包,libpcap/WinPcap提供了通用的抓包接口,能從不同類型的網絡接口(包括以太網、令牌環網、ATM網等)獲取數據包
Wiretap:將抓來的二進制數據轉換成需要的格式文件,此時獲取的是一些比特流,通過Wiretap(格式支持引擎)能從抓包文件中讀取數據包,支持多種文件格式
Core:核心引擎,通過函數調用將其他模塊連接在一起,起到聯動調用的作用,Epan(包分析引擎涉):Protocol-Tree(保存數據包的協議信息,協議結構採用樹形結構,解析協議報文時只需從根節點通過函數句柄依次調用各層解析函數即可)、Dissectors(各種協議解碼器,支持700多種協議解析,解碼器能識別出協議字段,並顯示出字段值,Wireshark採用協議樹的形式對數據流量的各層次協議逐層處理)、Plugins(一些協議解碼器以插件形式實現,源碼在plugins目錄)、Display-Filters(顯示過濾引擎,源碼在epan/dfilter目錄)。
GTK1/2:圖形處理工具,處理用戶的輸入輸出顯示,最終存儲至Harddisk硬盤中。
PS:瞭解基本的原理知識挺重要的,尤其爲後續。
13.功能模塊
模塊名 |
功能 |
源碼子目錄 |
GTK/Qt |
處理所有的用戶輸入/輸出(所有的窗口,對話框等等) |
/ui |
Core |
主要的"粘合代碼"(glue code),它把其他的塊組合到一起 |
/ |
Epan (Ethereal Packet Analyzer) |
協議樹(Protocol-Tree) - 保存捕獲文件的協議信息數據 |
/epan |
解析器(Dissectors) - 多種協議的解析器 |
/epan/dissectors |
|
插件(Plugins) - 一些用插件實現的協議解析器 |
/plugins |
|
顯示過濾器(Display-Filters) - 顯示過濾器引擎 |
/epan/dfilter |
|
Wiretap |
wiretap庫用於讀/寫libpcap格式或者其他文件格式的捕獲文件 |
/wiretap |
Capture |
抓包引擎相關接口 |
/ |
Dumpcap |
抓包引擎. 這是唯一需要提升權限來執行的部 |
/ |
WinPcap/libpcap |
(不是Wireshark包的一部分) - 依賴於平臺的包捕獲庫,包含捕獲過濾器引擎.這就是我們爲什麼有不同的顯示和捕獲 兩套過濾語法的原因 - 因爲用了兩種不同的過濾引擎 |
- |
14.WireShark代碼流程圖
15.小結
好了,到此宏哥就將Wireshark工具的前世今生基本上全都講解和分享完了,今天時間也不早了,就到這裏!感謝您耐心的閱讀~~