1. 程式人生 > >使用wireshark分析網路流量例項

使用wireshark分析網路流量例項

工具:Wireshark(Windows或Linux),tcpdump(Linux) 要求:使用過濾器捕獲特定分組;用指令碼分析大量流量資料(建議用perl)。 內容:Web流量分析 清除本機DNS快取(ipconfig /flushdns),訪問某一網站主頁,捕獲訪問過程中的所有分組,分析並回答下列問題:

(1)簡述訪問web頁面的過程。

(2)找出DNS解析請求、應答相關分組,傳輸層使用了何種協議,埠號是多少?所請求域名的IP地址是什麼?

(3)統計訪問該頁面共有多少請求IP分組,多少響應IP分組?(提示:用指令碼程式設計實現)

(4)找到TCP連線建立的三次握手過程,並結合資料,繪出TCP連線建立的完整過程,註明每個TCP報文段的序號、確認號、以及SYN\ACK的設定。

(5)針對(4))中的TCP連線,該TCP連線的四元組是什麼?雙方協商的起始序號是什麼?TCP連線建立的過程中,第三次握手是否帶有資料?是否消耗了一個序號?

(6)找到TCP連線的釋放過程,繪出TCP連線釋放的完整過程,註明每個TCP報文段的序號、確認號、以及FIN\ACK的設定。

(7)針對(6)中的TCP連線釋放,請問釋放請求由伺服器還是客戶發起?FIN報文段是否攜帶資料,是否消耗一個序號?FIN報文段的序號是什麼?為什麼是這個值?

(8)在該TCP連線的資料傳輸過程中,找出每一個ACK報文段與相應資料報文段的對應關係,計算這些資料報文段的往返時延RTT(即RTT樣本值)。根據課本200頁5.6.2節內容,給每一個數據報文段估算超時時間RTO。(提示:用指令碼程式設計實現)

(9)分別找出一個HTTP請求和響應分組,分析其報文格式。參照課本243頁圖6-12,在截圖中標明各個欄位。

(11)請描述HTTP協議的持續連線的兩種工作方式。訪問這些頁面(同一網站的不同頁面)的過程中,採用了哪種方式?
wireshark簡介 什麼是Wireshark
    Wireshark是網路包分析工具。網路包分析工具的主要作用是嘗試捕獲網路包,並嘗試顯示包的儘可能詳細的情況。
    你可以把網路包分析工具當成是一種用來測量有什麼東西從網線上進出的測量工具,就好像使電工用來測量進入電信的電量的電度表一樣。(當然比那個更高階)過去的此類工具要麼是過於昂貴,要麼是屬於某人私有,或者是二者兼顧。Wireshark出現以後,這種現狀得以改變。
    Wireshark可能算得上是今天能使用的最好的開源網路分析軟體。
主要應用
    下面是Wireshark一些應用的舉例:
     • 網路管理員用來解決網路問題
     • 網路安全工程師用來檢測安全隱患
     • 開發人員用來測試協議執行情況
     • 用來學習網路協議
    除了上面提到的,Wireshark還可以用在其它許多場合。
  wireshark介面如下所示:

在capture部分選擇網絡卡,然後點選start就開始捕獲資料,然後開啟瀏覽器訪問某個網頁,即可獲得大量資料包。 也可以通過選單欄Capture——Interfaces對話方塊開始。 兩個不錯的教程下載地址:http://down.51cto.com/data/626380  http://down.51cto.com/data/626381  設計與實現過程 (1)簡述訪問web頁面的過程,以西郵主頁為例:

b)域名系統DNS解析出郵電大學的IP地址202.117.128.8

c)瀏覽器與伺服器建立TCP連線

d)瀏覽器發出取檔案命令

e)伺服器端給出響應,把首頁檔案傳送給瀏覽器

f)釋放TCP連線

g)瀏覽器顯示西安郵電大學首頁中的所有文字

2)wireshark中DNS分組預設使用淺藍色

DNS解析請求分組,由下圖可以看出DNS是基於UDP的,源埠號1051,目的埠號53:

DNS應答分組,源埠號53,目的埠號1051:

如上所示,傳輸層使用了UDP(User Datagram protocol)協議。 請求域名的IP地址為:202.117.128.8 (3)應用如下顯示過濾規則,對包進行過濾:

然後點選選單欄的statics,接著點選summary選項,然後就能看到過濾後顯示的包的各項統計資料:

由上圖知63個IP請求分組(Display部分traffic,共捕獲155個包,顯示的為63個) 指令碼實現:
  1. #!/usr/bin/perl 
  2. $i=0
  3. while(<>){ 
  4.     if(/Frame/){ 
  5.         $i++; 
  6.     } 
  7. print "The number of IP request packets is:",$i,"\n"; 

4)比較重要的TCP三次握手問題,首先按下圖方法(edit——find packet)查詢到請求連線的包,(捕獲的包少的話,直接觀察查詢就行)

第一次握手:序號:seq=0;無確認號;ACK=0(not set);SYN=1

第二次握手:序號:seq=0;確認號:ack=1;ACK=1;SYN=1

第三次握手:序號seq=1;確認號:ack=1;ACK=1;SYN=0(not set); 還有一張畫的略挫的圖:

5)四元組:源IP地址:192.168.1.122、源埠號:1115;      目的IP地址:202.117.128.8、目的埠號:80      由上題知,雙方協商的起始序號是0。

由上圖,第三次握手後的報文段。序號seq:=1和第三次握手報文中的序號相同,由此可以看出第三次報文沒有消耗序號,沒有帶資料。6)比較重要的TCP四次揮手釋放連結

使用顯示過濾規則選擇一個客戶端埠(開啟一個網頁其實會建立許多TCP連線,選擇一個埠也是選擇一個特定的TCP連線):tcp.port == 2088得到下面這些報文

第一次揮手。序號:seq=5203、確認號:ack=919、FIN=1、ACK=1

第二次揮手。序號:seq=919、確認號:ack=5204、FIN=0、ACK=1

第三次揮手。序號:seq=919、確認號:ack=5204、ACK=1、FIN=1

第四次揮手。序號:seq=5204、確認號:ack=920、FIN=0、ACK=1 (7)1.  釋放請求由伺服器端(121.194.7.251)發起的。   2. FIN報文段不攜帶資料,消耗一個序號。根據TCP規定,FIN報文段即使不攜帶資料,也消耗 掉一個序號。根據第二次揮手報文,確認號為5204,說明沒有攜帶資料。 3. FIN報文段的序號是5203。 4. 由下圖可以看出此報文前的一個報文的確認號為:ack=5203,確認號是期望對方下一個報文段的第一個資料位元組的序號。即它等於前面已經傳送過的資料的最後一個位元組的序號加1。

(8)報文段的往返時間RTT(Round-Trip Time) 新的RTTs =(1-a)*(舊的RTTs)+ a*(新的RTT樣本值)

新的RTTD = (1-b)*(舊的RTTD) + b*|RTTs –新的RTT樣本|

超時重傳時間RTO = RTTs + 4 * RTTD;

以“tcp.srcport==1715”顯示過濾規則過濾對應一個tcp埠的tcp連線。 然後儲存為純文字格式,並拷到Linux虛擬機器中(為了使用perl環境):

perl指令碼如下:
  1. #!/usr/bin/perl 
  2. $i=0
  3. @RTT; 
  4. while(<>){ 
  5.         if(/RTT/){ 
  6.                 @words = split(/ +/,$_); 
  7.                 $RTT[$i++]=$words[8]; 
  8.         } 
  9. $i=0
  10. $RTTs=0
  11. $a=0.125; 
  12. $b=0.25; 
  13. while($RTT[$i]){ 
  14.         $RTTs *= (1-$a); 
  15.         $RTTs += $a*$RTT[$i]; 
  16.         if($i==0){ 
  17.                 $RTTd=$RTT[$i]/2; 
  18.         }else{ 
  19.                 $RTTd *= (1-$b); 
  20.                 $RTTd += $b * abs($RTTs-$RTT[$i]); 
  21.         } 
  22.         $RTO = $RTTs + 4*$RTTd; 
  23.         print "RTTs=",$RTTs,"\t"; 
  24.         print "RTTd=",$RTTd,"\t"; 
  25.         print "RTO=",$RTO,"\n"; 
  26.         $i++; 
在終端執行:perl 3.plx tcplink 執行結果如下:

 

9)以下是HTTP請求分組:

請求行:

Request MethodGET(請求的方法)

Request URL/go/act/sale/qq320x330.php?pid=mm_26051537……(URL)

Request Version:HTTP/1.1http版本)

首部行: Host:www.taobao.com\r\n(主機的域名) Connection:keep-alive\r\n(告訴伺服器傳送完請求文件後哦不釋放連結)

User-Agent:Mozilla/5.0(windows NT 5.1) AppleWebkit/537.6(KHTML,like Gecko) chrome/23.0.1243.2 Safari/537.6(使用者代理使用的基於Mozilla核心的瀏覽器)

Accept:text/html(希望接受的文件格式) 以下是HTTP響應分組:

開始行: Request version:HTTP/1.1(版本) Status code:200(狀態碼,2xx表示成功) Reponse Phrase:OK 首部行: Server:Tengine(web伺服器是Tengine) Date:Thu,06 Dec 2012 02:57:57 GMT Connection:keep-alive Vary:Accept-Encoding (11)HTTP/1.1協議的持續連線有兩種工作方式,即非流水線方式(without pipelining)和流水線方式(with pipelining) 非流水線方式的特點,是客戶端在收到前一個響應後才能發出下一個請求。 流水線方式的特點,是客戶端在收到HTTP的響應報文之前就能夠接著傳送新的值來請求報文。於是一個接一個的請求報文到達伺服器後,伺服器就可連續發回響應報文。流水線工作方式使TCP連線中的空閒時間減少。

由上圖可知,訪問同一網站的不同頁面採用了流水線方式。