WireShark使用教程

工具說明:windows

 抓包工具 Wireshark, 用來獲取網絡數據封包,包括 HTTP、TCP、UDP 等網絡協議包。wireshark是開源軟件,能夠放心使用。 能夠運行在WindowsMac OS上。瀏覽器

   wireshark只能查看封包,而不能修改封包的內容,或者發送封包。緩存

Wireshark VS Fiddler安全

   Fiddler是在windows上運行的程序,專門用來捕獲HTTP,HTTPS的。wireshark能獲取HTTP,也能獲取HTTPS,可是不能解密HTTPS,因此wireshark看不懂HTTPS中的
   內容。總結,若是是處理HTTP,HTTPS 仍是用Fiddler,  其餘協議好比TCP,UDP 就用wireshark。
   同類的其餘工具:微軟的 network monitorsniffer

開始抓包服務器

 wireshark是捕獲機器上的某一塊網卡的網絡包,當你的機器上有多塊網卡的時候,你須要選擇一個網卡。網絡

    點擊Caputre->Interfaces.. 出現下面對話框,選擇正確的網卡。而後點擊」Start」按鈕, 開始抓包。tcp

    點擊接口名稱以後,就能夠看到實時接收的報文。Wireshark會捕捉系統發送和接收的每個報文。若是抓取的接口是無線而且選項選取的是混合模式,那麼也會看到網絡上      其餘報文。上端面板每一行對應一個網絡報文,默認顯示報文接收時間(相對開始抓取的時間點),源和目標IP地址,使用協議和報文相關信息。點擊某一行能夠在下面兩個      窗口看到更多信息。「+」圖標顯示報文裏面每一層的詳細信息。底端窗口同時以十六進制和ASCII碼的方式列出報文內容。函數

 須要中止抓取報文的時候,點擊左上角的中止按鍵:工具

 色彩標識:性能

  進行到這裏已經看到報文以綠色,藍色,黑色顯示出來。Wireshark經過顏色讓各類流量的報文一目瞭然。
  好比默認綠色是TCP報文,深藍色是DNS,淺藍是UDP,黑色標識出   有問題的TCP報文——好比亂序報文。

  

   報文樣本

   好比說你在家安裝了Wireshark,但家用LAN環境下沒有感興趣的報文可供觀察,那麼能夠去Wireshark wiki下載報文樣本文件

   打開一個抓取文件至關簡單,在主界面上點擊Open並瀏覽文件便可。也能夠在Wireshark裏保存本身的抓包文件並稍後打開

   

   過濾報文:

   若是正在嘗試分析問題,好比打電話的時候某一程序發送的報文,能夠關閉全部其餘使用網絡的應用來減小流量。

   但仍是可能有大批報文須要篩選,這時要用到Wireshark過濾器。

   最基本的方式就是在窗口頂端過濾欄輸入並點擊Apply(或按下回車)。例如,輸入「dns」就會只看到DNS報文。輸入的時候,Wireshark會幫助自動完成過濾條件。

 也能夠點擊Analyze菜單並選擇Display Filters來建立新的過濾條件。

  

  另外一件頗有趣的事情是你能夠右鍵報文並選擇Follow TCP Stream

  你會看到在服務器和目標端之間的所有會話。

 關閉窗口以後,你會發現過濾條件自動被引用了——Wireshark顯示構成會話的報文。

 

 檢查報文:

  選中一個報文以後,就能夠深刻挖掘它的內容了。

  也能夠在這裏建立過濾條件——只需右鍵細節並使用Apply as Filter子菜單,就能夠根據此細節建立過濾條件

  

   Wireshark是一個很是之強大的工具,網絡專家用它來debug網絡協議實現細節,檢查安全問題,網絡協議內部構件等等

   WireShark 主要分爲這幾個界面

   1. Display Filter(顯示過濾器),  用於過濾

   2. Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標地址,端口號。 顏色不一樣,表明

   3. Packet Details Pane(封包詳細信息), 顯示封包中的字段

   4. Dissector Pane(16進制數據)

   5. Miscellanous(地址欄,雜項)

  

  過濾器有兩種:

  一種是顯示過濾器,就是主界面上那個,用來在捕獲的記錄中找到所須要的記錄

  一種是捕獲過濾器,用來過濾捕獲的封包,以避免捕獲太多的記錄。 在Capture -> Capture Filters 中設置

  過濾表達式的規則

  1. 協議過濾,好比TCP,只顯示TCP協議。

  2. IP 過濾,好比 ip.src ==192.168.1.102 顯示源地址爲192.168.1.102,ip.dst==192.168.1.102, 目標地址爲192.168.1.102

  3.端口過濾,好比 tcp.port ==80,  端口爲80的

  4. Http模式過濾,好比 http.request.method==」GET」,   只顯示HTTP GET方法的。

  5. 邏輯運算符爲 AND/ OR

  封包列表(Packet List Pane)

  封包列表的面板中顯示,編號,時間戳,源地址,目標地址,協議,長度,以及封包信息。 你能夠看到不一樣的協議用了不一樣的顏色顯示。

  你也能夠修改這些顯示顏色的規則,  View ->Coloring Rules.

  封包詳細信息 (Packet Details Pane)

  這個面板是咱們最重要的,用來查看協議中的每個字段。

  各行信息分別爲

  Frame:物理層的數據幀概況

  EthernetII:數據鏈路層以太網幀頭部信息

  Internet Protocol Version 4:互聯網層IP包頭部信息

  Transmission Control Protocol:傳輸層T的數據段頭部信息,此處是TCP

  Hypertext Transfer Protocol:應用層的信息,此處是HTTP協議

TCP:

TCP/IP經過三次握手創建一個鏈接。這一過程當中的三種報文是:SYN,SYN/ACK,ACK。

第一步是找到PC發送到網絡服務器的第一個SYN報文,這標識了TCP三次握手的開始。

若是你找不到第一個SYN報文,選擇Edit -> Find Packet菜單選項。選擇Display Filter,輸入過濾條件:tcp.flags,這時會看到一個flag列表用於選擇。選擇合適的flag,tcp.flags.syn而且加上==1。點擊Find,以後trace中的第一個SYN報文就會高亮出來了。

 

注意:Find Packet也能夠用於搜索十六進制字符,好比惡意軟件信號,或搜索字符串,好比抓包文件中的協議命令。

一個快速過濾TCP報文流的方式是在Packet List Panel中右鍵報文,而且選擇Follow TCP Stream。這就建立了一個只顯示TCP會話報文的自動過濾條件。

這一步驟會彈出一個會話顯示窗口,默認狀況下包含TCP會話的ASCII代碼,客戶端報文用紅色表示,服務器報文則爲藍色。

HTTP

當HTTP發送初始GET命令以後,TCP繼續數據傳輸過程,接下來的連接過程當中HTTP會從服務器請求數據並使用TCP將數據傳回客戶端。傳送數據以前,服務器經過發送HTTP  OK消息告知客戶端請求有效。若是服務器沒有將目標發送給客戶端的許可,將會返回403 Forbidden。若是服務器找不到客戶端所請求的目標,會返回404。

若是沒有更多數據,鏈接可被終止,相似於TCP三次握手信號的SYN和ACK報文,這裏發送的是FIN和ACK報文。當服務器結束傳送數據,就發送FIN/ACK給客戶端,此報文表示結束鏈接。接下來客戶端返回ACK報文而且對FIN/ACK中的序列號加1。這就從服務器端終止了通訊。要結束這一過程客戶端必須從新對服務器端發起這一過程。必須在客戶端和服務器端都發起並確認FIN/ACK過程。

基本IO Graphs:

IO graphs是一個很是好用的工具。基本的Wireshark IO

graph會顯示抓包文件中的總體流量狀況,一般是以每秒爲單位(報文數或字節數)。默認X軸時間間隔是1秒,Y軸是每一時間間隔的報文數。若是想要查看每秒bit數或byte數,點擊「Unit」,在「Y

Axis」下拉列表中選擇想要查看的內容。這是一種基本的應用,對於查看流量中的波峯/波谷頗有幫助。要進一步查看,點擊圖形中的任意點就會看到報文的細節。

過濾:

每個圖形均可以應用一個過濾條件。這裏建立兩個不一樣的graph,一個HTTP一個ICMP。能夠看到過濾條件中Graph 1使用「http」Graph 2使用「icmp」。圖中能夠看到紅色ICMP流量中有些間隙,進一步分析。

過濾

經常使用排錯過濾條件:

對於排查網絡延時/應用問題有一些過濾條件是很是有用的:

tcp.analysis.lost_segment:代表已經在抓包中看到不連續的序列號。報文丟失會形成重複的ACK,這會致使重傳。

tcp.analysis.duplicate_ack:顯示被確認過不止一次的報文。大涼的重複ACK是TCP端點之間高延時的跡象。

tcp.analysis.retransmission:顯示抓包中的全部重傳。若是重傳次數很少的話仍是正常的,過多重傳可能有問題。這一般意味着應用性能緩慢和/或用戶報文丟失。

tcp.analysis.window_update:將傳輸過程當中的TCP window大小圖形化。若是看到窗口大小降低爲零,這意味着發送方已經退出了,並等待接收方確認全部已傳送數據。這可能代表接收端已經不堪重負了。

tcp.analysis.bytes_in_flight:某一時間點網絡上未確認字節數。未確認字節數不能超過你的TCP窗口大小(定義於最初3此TCP握手),爲了最大化吞吐量你想要得到儘量接近TCP窗口大小。若是看到連續低於TCP窗口大小,可能意味着報文丟失或路徑上其餘影響吞吐量的問題。

tcp.analysis.ack_rtt:衡量抓取的TCP報文與相應的ACK。若是這一時間間隔比較長那可能表示某種類型的網絡延時(報文丟失,擁塞,等等)。

函數:

IO Graphs有六個可用函數:SUM, MIN, AVG, MAX, COUNT, LOAD。

MIN( ), AVG( ), MAX( )

首先看一下幀之間的最小,平均和最大時間,這對於查看幀/報文之間的延時很是有用。咱們能夠將這些函數結合「frame.time_delta過濾條件看清楚幀延時,並使得往返延時更爲明顯。若是抓包文件中包含不一樣主機之間的多個會話,而只想知道其中一個pair,可將「frame.time_delta」結合源和目標主機條件如「ip.addr==x.x.x.x &&ip.addr==y.y.y.y」。以下圖所示:

函數

咱們作了如下步驟:

將Y軸設置爲「Advanced」,讓Caculation域可見。不作這一步就看不到計算選項。

X軸時間間隔1秒,因此每一個柱狀圖表明1秒間隔的計算結果。

過濾出兩個特定IP地址的HTTP會話,使用條件:「(ip.addr==192.168.1.4&& ip.addr==128.173.87.169) && http」。

使用3個不一樣的graph,分別計算Min(), Avg(), Max()。

對每個計算結果應用條件「frame.time_delta」,將style設置成「FBar」,顯示效果最佳。

Count( ):此函數計算時間間隔內事件發生的次數,在查看TCP分析標識符時頗有用,例如重傳。

Sum( ):該函數統計事件的累加值。有兩種常見的用例是看在捕獲TCP數據量,以及檢查TCP序列號。

協議過濾器:

arp:顯示全部包括ARP請求和回覆在內的全部ARP數據流。

ip:顯示內含IPv4頭在內的(如ICMP目的地址不可達報文,在ICMP報文頭以後返回到來方向的IPv4頭)IP數據流。

ipv6:顯示全部IPv6數據流,包括內含IPv6報文頭的IPv4報文,如6to4,Teredo,以及ISATAP數據流。

tcp:顯示全部基於TCP的數據流。

應用過濾器:

bootp:顯示全部DHCP數據流(基於BOOTP)。

dns:顯示包括TCP區域傳輸以及基於標準UDP的DNS請求和回覆在內的全部DNS數據流。

tftp:顯示全部TFTP(Trivial File Transfer Protocol)數據流。

http:顯示全部HTTP命令,回覆以及數據傳輸報文,但不顯示TCP握手報文,TCP ACK報文以及TCP結束報文。

icmp:顯示全部ICMP報文。

域過濾器:

boot.option.hostname:顯示全部包含主機名的DHCP數據流(DHCP基於BOOTP)。

http:host:顯示全部包含HTTP主機名字段的全部HTTP報文。此報文是客戶端向網絡服務器發送請求時發出的。

ftp.request.command:顯示全部包含命令的FTP數據流,好比USER,PASS,或RETR命令。

字符過濾器:

tcp.analysis.flags:顯示全部包含TCP分析標識的全部報文,包括報文丟失,重傳,或零窗口標識。

tcp.analysis,zero_window:顯示含有代表發送方的接收緩存用完標識的報文。

顯示過濾器比較運算符:

經過擴展過濾條件可查找某一域值,Wireshark針對此功能支持數字比較運算符。

1. ==或eq

例如:ip.src == 10.2.2.2

顯示全部源地址爲10.2.2.2的IPv4數據流

2. !=或ne

例如:tcp.srcport != 80

顯示源端口除了80之外的全部TCP數據流

3. >或gt

例如:frame.time_relative > 1

顯示距前一個報文到達時間相差1秒的報文

4. <或lt

例如:tcp.window_size < 1460

顯示當TCP接收窗口小於1460字節時的報文

5. >=或ge

例如:dns.count.answers >= 10

顯示包含10個以上answer的DNS響應報文

6. <=或le

例如:ip.ttl <= 10

顯示IP報文中Time to Live字段小於等於10的報文

7. contains

例如:http contains 「GET」

顯示全部HTTP客戶端發送給HTTP服務器的GET請求

對於基於TCP應用的過濾條件採用比較運算符。例如,若是想看端口80上面的HTTP數據流,使用HTTP.port==80。

小貼士:

運算符兩邊不用留空格。ip.src == 10.2.2.2與ip.src==10.2.2.2的效果是相同的。

過濾HTTP數據流:

在排查網頁瀏覽器會話或檢查網速過慢問題時,對瀏覽器會話進行過濾就顯得尤其重要。過濾HTTP數據流有兩種方式:

http

tcp.port==xx(xx表示所使用的HTTP端口)

第二種過濾方法更加有效

相關文章
相關標籤/搜索