實驗環境
實驗環境 操作機:Windows XP
實驗工具:
Tools
Path
Wireshark
桌面
實驗文件:Lab1-1.pcapng
本課程我們將認識Wireshark的界面。
實驗步驟
下載實驗文件
快速查找實驗工具
打開桌面 Everything
搜索工具,輸入實驗工具名稱,右擊選擇“打開路徑”,跳轉實驗工具所在位置。
以查找BURP
為例為大家演示。
請訪問http://file.ichunqiu.com/45668f52
下載實驗文件。
小i提示:
在本次實驗中,請注意實驗工具、實驗文件存放路徑,不同的文件路徑可能會出現不一樣的實驗結果。
在實驗環境中無法連接互聯網,請使用您本地的網絡環境。
Wireshark的主窗口界面
我們在正式利用Wireshark
進行數據包分析之前,應當首先了解一下這款軟件主 窗口界面中每個部分的功能。Wireshark主窗口界面如下圖所示(實驗文件Lab1- 1.pcapng):
上圖中每部分的含義如下:
標題欄:用于顯示所分析的抓包文件的名稱、捕獲的設備名稱以及Wireshark的 版本號。
菜單欄:Wireshark的標準菜單欄。
工具欄:常用功能的快捷圖標按鈕。
篩選區域:我們在實際的數據包分析中,可能在很短的時間內就能夠捕獲到成 千上萬的數據包信息。這個時候就需要使用這里的篩選器
,加上一定的條件,篩 選掉我們并不關心的數據包,從而更好地進行分析。我們在接下來的實際分析課程 中,會多次使用篩選功能。
Packet List面板:顯示每個數據幀的摘要。需要強調的是,其實這里所捕獲 的其實就是數據幀
,但是出于表達的習慣,本系列的課程中的大部分時候,我會 以“數據包”的叫法來代替“數據幀”以及“分段”。這里采用表格的形式列出了 當前捕獲文件中的所有數據包,其中包括了數據包序號
、數據包捕獲的相對時 間
、數據包的源地址
和目標地址
、數據包的協議
以及在數據包中找到的概 況信息
等。
Packet Details面板:分析數據包的詳細信息。這個面板分層次地顯示了一個 數據包中的內容,并且可以通過展開或是收縮來顯示這個數據包中所捕獲的全部內 容。在我們的課程中,Packet List
面板以及Packet Details
面板是我們重點 關注的對象。
Packet Bytes面板:以十六進制和ASCII碼的形式顯示數據包的內容。這里顯 示了一個數據包未經處理的原始
樣子,也就是在鏈路上傳播時的樣子。
狀態欄:包含有專家信息、注釋、包的數量和Profile。
認識數據包
一旦我們開始利用Wireshark進行數據包的捕獲
,那么所獲得的二進制數據就會 依照不同的協議的結構進行規范,并且顯示在Packet Details
面板中。這里我 給大家簡單介紹一下識別數據包的方法。
在Wireshark中,關于數據包的叫法主要有3個術語,也就是幀、包、段。數據幀 的起始點和目的點都是數據鏈路層
;數據包的起始和目的地是網絡層;段通常是 指起始點和目的地都是傳輸層的信息單元。這里我們通過以下捕獲的數據包來分析 一下這三種術語(以下展示的是通過篩選器顯示HTTP協議
,并查看3934號數據 包的情況):
這里面主要展示了以下五種協議的信息:
Frame:物理層數據幀的情況。
Ethernet II:數據鏈路層以太網幀頭部的信息。
Internet Protocol Version 4:網絡層IP包的頭部信息。
Transmission Control Protocol:傳輸層的數據段頭部信息,這里顯示的是
TCP協議。
Hypertext Transfer Protocol:應用層信息,這里顯示的是HTTP協議
。 下面依據上述所捕獲到的數據包的具體情況,對上述前四層的內容進行分析(HTTP 協議在以后的課程中會專門用一次課來講解):
物理層數據幀的情況
Frame 3934: 310 bytes on wire (2480 bits), 310 bytes captured (2480 bits) on interface 0# 3934號幀,線路上有310個字節,實際捕獲310個字節Interface id: 0 (\Device\NPF_{EF10E4D3-713B-4239-8786-300C825A9D3F})# 接口idEncapsulation type: Ethernet (1)# 封裝類型Arrival Time: Nov 26, 2015 11:54:10.987177000 中國標準時間# 捕獲日期和時間[Time shift for this packet: 0.000000000 seconds]Epoch Time: 1448510050.987177000 seconds[Time delta from previous captured frame: 0.014178000 seconds]# 當前數據包與前一個數據包的時間間隔[Time delta from previous displayed frame: 0.311034000 seconds][Time since reference or first frame: 10.449670000 seconds]# 當前數據包與第一個數據包的時間間隔Frame Number: 3934# 幀序號Frame Length: 310 bytes (2480 bits)# 幀長度Capture Length: 310 bytes (2480 bits)# 捕獲長度[Frame is marked: False]# 此幀是否做了標記:否[Frame is ignored: False]# 此幀是否被忽略:否[Protocols in frame: eth:ethertype:ip:tcp:http:image-gif]# 幀內封裝的協議層次結構[Number of per-protocol-data: 1][Hypertext Transfer Protocol, key 0][Coloring Rule Name: HTTP]# 著色標記的協議名稱[Coloring Rule String: http || tcp.port == 80 || http2]著色規則顯示的字符串
數據鏈路層以太網幀頭部的信息
Ethernet II, Src: Qihoo360_61:0b:0c (d0:fa:1d:61:0b:0c), Dst: Giga-Byt_d4:be:c9 (94:de:80:d4:be:c9)Destination: Giga-Byt_d4:be:c9 (94:de:80:d4:be:c9)# 目標MAC地址Source: Qihoo360_61:0b:0c (d0:fa:1d:61:0b:0c)# 源MAC地址Type: IP (0x0800)# 需要說明的是,為什么上述的源MAC地址以及目標MAC地址的開頭明明是“d0:fa:1d”以及“94:de:80”,# 但是Wireshark上顯示出來的卻是“Qihoo360”以及“Giga-Byt”# 呢?這是因為MAC地址的前3 # 個字節表示廠商。而“d0:fa:1d”以及“94:de:80”被分# 配給了奇虎以及技嘉公司。這是全球統一標# 準,所以Wireshark干脆顯示出廠商名稱了
網絡層IP包的頭部信息
Internet Protocol Version 4, Src: 220.181.7.190 (220.181.7.190), Dst: 192.168.0.14 (192.168.0.14)Version: 4# 互聯網協議IPv4Header Length: 20 bytes# IP包頭部的長度Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))# 差分服務字段Total Length: 296# IP包的總長度Identification: 0x2863 (10339)# 標志字段Flags: 0x02 (Don't Fragment)# 標記字段Fragment offset: 0# 分片偏移Time to live: 49# 生存期Protocol: TCP (6)# 當前數據包所封裝的上層協議為TCP協議Header checksum: 0x7b43 [validation disabled]# 頭部數據的校驗和Source: 220.181.7.190 (220.181.7.190)# 源IP地址Destination: 192.168.0.14 (192.168.0.14)# 目標IP地址
傳輸層TCP數據段的頭部信息
Transmission Control Protocol, Src Port: 80 (80), Dst Port: 2488 (2488), Seq: 422, Ack: 3024, Len: 256Source Port: 80 (80)# 源端口號Destination Port: 2488 (2488)# 目標端口號[Stream index: 16][TCP Segment Len: 256]Sequence number: 422 (relative sequence number)# 序列號(相對序列號)[Next sequence number: 678 (relative sequence number)]# 下一個序列號(相對序列號)Acknowledgment number: 3024 (relative ack number)# 確認序列號Header Length: 20 bytes# 頭部長度.... 0000 0001 1000 = Flags: 0x018 (PSH, ACK)# TCP標記字段Window size value: 162# 流量控制的窗口大小Checksum: 0x6fc4 [validation disabled]# TCP數據段的校驗和
篩選器的簡單用法
Wireshark的篩選器可以讓我們找出我們所希望進行分析的數據包
。簡單來說, 一個篩選器就是定義了一定的條件,用來包含或者排除數據包的表達式。如果在實 際的分析中,不希望看到某一些數據包,那么就可以通過篩選器來屏蔽
掉它們, 從而只顯示我們感興趣的內容。但是這里需要注意的是,有些時候,我們在進行網 絡分析時,可能會因為設置了不恰當的篩選器而漏掉了一些關于這個網絡情況的關 鍵數據,所以篩選器有時候也是一把雙刃劍
。
篩選器主要是在處理大量的數據
時使用,比如我們剛才就使用了篩選器來專門顯 示HTTP協議的數據包。這是關于篩選器的最簡單的一種用法。篩選器也支持與 (and)、或(or)、非(not)等邏輯運算符,可以加強
篩選的效率。比如我 們可以通過如下語句來顯示出所有IP地址為180.97.34.134,端口號為80的數據包 :
ip.addr==180.97.34.134 and tcp.port==80
或者也可以查看所有非TCP協議
的協議:
!tcp
除了邏輯操作符,在篩選器中還可以使用比較操作符
,比如等于(==)、不等于 (!=)、大于(>)、小于(<)、大于等于(>=)以及小于等于(<=)等。比如我 們現在只想查看長度小于等于150字節的數據包,則可以使用如下命令:
frame.len<=150
最后再講一下Wireshark的協議域
篩選器。這個功能可以幫助我們通過檢查協議 頭中的某一個字節來創建篩選條件,或者也可以匹配一個數據包中從某一特定位置 開始一定數量的字節。舉例來說,比如我們想捕獲帶有(PSH,ACK)標志的TCP數據 包
。那么就可以檢測TCP協議中偏移為13的標志位的情況。盡管這個標志位只有1 個字節,但是這個字節中的每一個比特位都是一個標志。
我們可以用如下命令進行查看:
tcp[13]==0x18
如果我們在實際的分析過程中發現某一個篩選條件使用的比較頻繁
,那么可以考 慮將這個篩選條件保存下來,避免每次分析中的重復輸入。我們可以在菜單欄中選 擇“Analyze”->“Display Filter”,打開Display Filter對話框。
單擊左邊的New
按鈕,創建一個新的篩選器。并且在“Filter Name”中給 篩選器起一個名字,在“Filter String”中輸入篩選表達式,之后單 擊“OK”進行保存即可:
靈活使用篩選器會起到事半功倍的效果,我們在之后的分析中也會多次用到。