在上一篇博文中,主要講解了wireshark的界面,以及如何抓包和過濾所須要的包。這篇博文主要講解一下如何分析捕獲的數據包。
php
回顧上一篇的內容:html
抓取封包linux
啓動wireshark,在接口列表中選擇網卡接口名,而後點擊開始,則在此接口上抓包。菜單:Capture -> Options 能夠配置高級屬性,可是如今咱們先無論。
瀏覽器
選擇一個接口,而後點擊工具欄的"Start",就能夠看到捕獲的封包。Wireshark默認會捕獲該接口全部發送和接收的封包。服務器
若是要中止捕獲,點擊工具欄的"Stop"(紅色的小方塊),便可。若是不中止,一直會不斷的抓取數據包,可能致使咱們的內存吃緊。
網絡
過濾封包tcp
默認狀況下,Wireshark會捕獲大量的封包,以致於咱們沒法找到所須要的封包。這時就要用到wireshark過濾器。wireshark提供兩種類型的過濾器,一種是捕獲過濾器,一種是顯示過濾器。
ide
最基本的方式就是使用窗口頂端的顯示過濾器,輸入過濾表達式(或者點擊Expression按鈕,而後選擇一個過濾表達式)並點擊輸入框後的"Apply"或者按下回車。
工具
一樣,咱們也能夠點擊菜單中的Analyze -> Display Filters來自定義咱們的過濾條件。post
另外一個頗有趣的事情是,在封包列表窗口,選擇一個封包而後右鍵,會出現follow TCP stream或follow UDP stream(SSL我是沒見過)可選,而後follow進去。
解釋一下:Follow Stream是什麼意思呢?也就是會話記錄,服務器和客戶端之間的所有會話記錄。
新手上路一般都會疑問,這麼多請求我應該follow哪一個封包?實際看哪一個都是同樣。follow進入就是一個歷史頁面,進入了再慢慢找你須要的數據。你會發現顯示過濾表達式被自動生成,wireshark僅顯示構成此會話的全部封包。
這裏還有一個更好玩的,如何構造顯示過濾表達式。
假設我要捕獲全部以首部Flags標誌爲ACK的封包,怎麼辦呢?
TCP/IP協議棧(DOD模型)
wireshark-以太網幀示例
wireshark是嚴格遵循OSI模型規範的。咱們知道以太網是實如今數據鏈路層和物理層的。
IP數據報
wireshark-IP數據報示例
TCP報文段
wireshark-TCP報文段示例
咱們能夠很清晰的看到,wireshark中的首部數據與OSI模型中各協議的首部格式是相對應的。因此,利用wireshark來學習網絡,那是很是直觀有效的。
wireshark 實戰演練
實驗一:網絡中明碼傳輸的危險性
經過明碼傳輸的protocol和工具至關多,典型的就是telnet,ftp,http。咱們拿telnet作此次實驗。假設我以telnet方式登陸到個人linux服務器,而後經過wireshark抓包,以抓取帳號和密碼信息。
一、首先啓動wireshark,並處於Capture狀態。而後經過telnet遠程登陸咱們的linux服務器。
進入登陸界面後,輸入帳號和密碼登入系統。
二、接下來中止wireshark的截取封包的操做,執行快捷方式的"Stop"便可。
不過,捕獲的信息很是多,這個時候能夠利用Display Filter功能,過濾顯示的內容,以下圖所示,點擊Expression,而後選擇過濾表達式。這裏,咱們選擇TELNET便可。
表達式肯定以後,選擇"Apply",就能夠過濾出只包含TELNET的封包
來,咱們查看一下整個telnet會話的全部記錄, wireshark能夠記錄會話記錄(就像咱們聊QQ時,"QQ聊天記錄"同樣),任意找到一個telnet封包,右鍵找到"Follow TCP Stream",wireshark就會返回整個會話記錄。
OK, 咱們看到如下這些數據信息,紅色的部分是咱們發送出去的DATA,藍色的部分是咱們接收到的DATA。 , 告訴我, 你看到了什麼
爲了更準確的看清楚,咱們再次僅篩選出咱們發送出去的DATA。或者僅接收到的DATA。
從這裏,咱們能夠確切的抓到帳號和密碼信息。login:wireshark Password:123456,除了這些,咱們還能夠更進一步知作別人在看什麼網站,或是私人文件,隱私將毫無保障。
注:爲了不這些狀況,防止有心人監測到重要信息,可使用SSH,SSL,TSL,HTTPS等加密協議對重要數據進行加密,而後再到網絡上傳輸,若是被人截取下來,看到的內容也是被加密的。
實驗二:HTTP Protocol
目的:經過觀察HTTP協議,練習如何過濾出本身須要的數據,並可以清楚的知道TCP/IP實際的運做方式。
這裏,咱們採用"(Capture Filter)捕獲過濾",菜單欄 Capture -> Options
跟咱們相關設定的有以下部分,Use promiscuous mode on all interfaces, Capture Filter, 其實咱們須要設定的僅僅是Captrue Filter
Capture Filter使用libpcap filter語言,詳細的語法能夠參考tcpdump的man頁面( http://www.tcpdump.org/tcpdump_man.html )
咱們這裏不須要使用這麼複雜的過濾表達式,直接用wireshark已經創建好的經常使用功能HTTP TCP port(80)便可。首先點擊"Capture Filter"按鈕,而後選擇HTTP TCP port(80), OK以後選擇"Start"開始捕獲封包。
這裏以瀏覽器訪問www.baidu.com首頁爲例, 來看看訪問一個網頁會發生什麼?
回到wireshark,看到已經抓取了不少封包。OK,前面咱們已經交代了TCP/IP協議棧,這裏就再也不累述。
看下面這幅圖中,紅色的框框,這就是TCP在作三次握手,創建鏈接。
接下來這一行,就是Client向server做出request。
咱們能夠在封包詳細信息列表框中,針對於每一層查看,更清楚的瞭解每一層的運做模式,同理也可使用Follow TCP Stream
https://community.emc.com/message/818739#818739
http://openmaniak.com/cn/wireshark_use.php
http://blog.shaolin.tw/2008/03/wireshark.html
http://man.lupaworld.com/content/network/wireshark/Introduction.html#whatis