計算機網路實驗二——利用wireshark抓包

蔡姬努力變大佬發表於2020-12-25

準備

請自行查詢或使用如下參考資料,瞭解 Wireshark 的基本使用:
•選擇對哪塊網路卡進行資料包捕獲
•開始/停止捕獲
•瞭解 Wireshark 主要視窗區域
•設定資料包的過濾
•跟蹤資料流
參考連結:https://blog.csdn.net/wz_cow/article/details/81489671

wireshark使用
1,Wireshark的介紹
在這裡插入圖片描述
上圖是資料包嗅探器的結構,最右側為計算機上執行的協議與網路應用程式,通過左側虛線框中的圖示得到,所謂資料抓包,實際上是複製TCP / IP的資料鏈路層中接收或傳送的乙太網幀(乙太網幀),因為所有上層協議最終都已經封裝在乙太網幀中了。作為一款開源的資料包嗅探器(資料包嗅探器),可以執行在windows ,蘋果機,Linux以及Unix的平臺上,擁有龐大的使用者群和完善的幫助文件與常見問題,內部具有數百個協議庫,我們可以通過Wireshark的進行各類協議的學習分析,真正做到做中學。(從技術上講wireshark應該是資料包分析器(資料包分析器))
2,獲取安裝的Wireshark
下載安裝Wireshark軟體:https://www.wireshark.org/,根據實驗主機系統下載安裝對應版本
3,執行Wireshark的
不同的版本會有不同的介面,在下方在介面列表中選擇要捕獲資料包的網路卡。
在這裡插入圖片描述A區:標準的下拉選單命令
B區:快捷工具欄
C區:資料包顯示過濾器欄位(包顯示過濾器),可以通過輸入協議名稱或其他資訊,在眾多捕獲的資料包中過濾相關資訊
D區:捕獲的包列表(捕獲資料包列表),顯示當前捕獲檔案中的所有資料包,相關列欄位可以進行定製
E區:資料包頭部細節(包頭詳情),以TCP / IP格式分層顯示一個資料包中的內容
F區:資料包位元組(包位元組),以ASCII和十六進位制格式顯示捕獲的幀的全部內容
4.抓包過濾
①顯示過濾: wireshark過濾經過指定ip的資料包
顯示過濾可以完整的復現測試時的網路環境,但會產生較大的捕獲檔案和記憶體佔用。
ip.addr = = 192.168.1.1//顯示所有目標或源地址是192.168.1.1的資料包
ip.dst= =192.168.1.1//顯示目標地址是192.168.1.1的資料包
ip.src = =192.168.1.1//顯示源地址是192.168.1.1的資料包
eth.addr== 80:f6:2e:ce:3f00//根據MAC地址過濾,詳見“wireshark過濾MAC地址/實體地址”
ip.src==192.168.0.0/16 //網路過濾,過濾一個網段
②捕獲過濾: wireshark捕獲經過指定ip的資料包
捕捉過濾抓包前在capture option中設定,僅捕獲符合條件的包,可以避兔產生較大的捕獲檔案和記憶體佔用,但不能完整的復現測試時的網路環境。
host 192.168.1.1//抓取192.168.1.1收到和發出的所有資料包
src host 192.168.1.1//源地址,192.168.1.1發出的所有資料包
dst host 192.168.1.1//目標地址,192.168.1.1收到的所有資料包
src host hostname//根據主機名過濾
ether host 80:05:09:03:E4:35//根據MAC地址過濾
net 192.168.1//網路過濾,過濾整個網段
src net 192.168
dst net 192

? 參考
1.官方文件 https://www.wireshark.org/docs/wsug_html/
2.Wireshark抓包新手使用教程https://www.cnblogs.com/linyfeng/p/9496126.html
3.Troubleshooting with Wireshark http://file.allitebooks.com/20160907/Troubleshooting%20with%20Wireshark.pdf
4.The Official Wireshark Certified Network Analyst Study Guide http://file.allitebooks.com/20150724/Wireshark%20Network%20Analysis-%20The%20Official%20Wireshark%20Certified%20Network%20Analyst%20Study%20Guide,%202nd%20Edition.pdf
5.Wireshark Network Security http://file.allitebooks.com/20190315/Wireshark%20Network%20Security.pdf

一、資料鏈路層

實作一 熟悉 Ethernet 幀結構

使用 Wireshark 任意進行抓包,熟悉 Ethernet 幀的結構,如:目的 MAC、源 MAC、型別、欄位等。
在這裡插入圖片描述
在這裡插入圖片描述
目的 MAC:96:55:a4:4c:7e:03
源 MAC:d0:c5:d3:25:a3:7b
型別:IPv4 (0x0800)

✎ 問題

你會發現 Wireshark 展現給我們的幀中沒有校驗欄位,請了解一下原因。
答:幀校驗序列FCS(4位元組):採用迴圈冗餘校驗碼(CRC)用於檢驗幀在傳輸過程中有無差錯。由於是在傳輸過程中會使用校驗的欄位,因此,抓包軟體抓到的是過濾過的資料。

實作二 瞭解子網內/外通訊時的 MAC 地址

1.ping 你旁邊的計算機(同一子網),同時用 Wireshark 抓這些包(可使用 icmp 關鍵字進行過濾以利於分析),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是多少?這個 MAC 地址是誰的?
答:發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是 ,這個MAC地址就是旁邊這臺計算機的MAC地址。

2.然後 ping qige.io (或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 icmp 過濾),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是多少?這個 MAC 地址是誰的?
在這裡插入圖片描述
在這裡插入圖片描述

答:發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是96:55:a4:4c:7e:03 ,這個 MAC 地址是我的主機所處子網的閘道器MAC地址。

3.再次 ping www.cqjtu.edu.cn (或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 icmp 過濾),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址又是多少?這個 MAC 地址又是誰的?
在這裡插入圖片描述

在這裡插入圖片描述

答:發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是96:55:a4:4c:7e:03,這個 MAC 地址是我的主機所處子網的閘道器MAC地址。

✎ 問題

通過以上的實驗,你會發現:
1.訪問本子網的計算機時,目的 MAC 就是該主機的
2.訪問非本子網的計算機時,目的 MAC 是閘道器的
請問原因是什麼?
答:因為在子網之內的計算機就不需要經過閘道器,可以直接查詢MAC地址並建立連線;而訪問子網外的需要先將資料傳送到閘道器處,然後ARP或者DNS解析得到MAC地址後到達目的子網傳送到目的地址,所以無論是傳送還是接受都要經過本計算機的閘道器。

實作三 掌握 ARP 解析過程

1.為防止干擾,先使用 arp -d * 命令清空 arp 快取
2.ping 你旁邊的計算機(同一子網),同時用 Wireshark 抓這些包(可 arp 過濾),檢視 ARP 請求的格式以及請求的內容,注意觀察該請求的目的 MAC 地址是什麼。再檢視一下該請求的回應,注意觀察該回應的源 MAC 和目的 MAC 地址是什麼。

答:訪問的是本子網的 IP,回應的源MAC是 IP 對應的 MAC,即旁邊計算機的MAC地址;目的 MAC 地址是我的主機MAC地址。
3.再次使用 arp -d * 命令清空 arp 快取
4.然後 ping qige.io (或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 arp 過濾)。檢視這次 ARP 請求的是什麼,注意觀察該請求是誰在回應。
在這裡插入圖片描述

在這裡插入圖片描述

答: ARP 請求的是ff ff ff ff ff ff。訪問的非本子網的 IP, 所以回應的是閘道器的 MAC。

✎ 問題

通過以上的實驗,你應該會發現,
1.ARP 請求都是使用廣播方式傳送的
2.如果訪問的是本子網的 IP,那麼 ARP 解析將直接得到該 IP 對應的 MAC;如果訪問的非本子網的 IP, 那麼 ARP 解析將得到閘道器的 MAC。
請問為什麼?
答:1.因為在我們ping之前(抓包之前),我們首先將arp快取清楚了,所以當我們去ping任意一臺主機或網頁,我們本地的arp快取中都沒有相應的MAC地址,所以需要廣播尋找目的地址。2.因為在子網之內的計算機就不需要經過閘道器;而訪問子網外的需要先將資料傳送到閘道器處。

二、網路層

實作一 熟悉 IP 包結構

在這裡插入圖片描述
版本(Version):4位。IP版本號。 包頭長(IHL):4位。以4位元組為單位,如0101表示IP包的包頭長度20位元組。
服務型別(TOS,Type of service):1位元組。指示路由器如何處理該資料包。 總長(Total
Length):2位元組。IP資料包的總長度。 標識(Identification):2位元組。系統範圍內,每發出一個IP包,其值自動增加1。
分段標誌: 1、保留位:1位 2、不分段(DF,Don’t Fragment):1位 3、更多段(MF,More Fragments):1位
4、分段偏移:13位。

生命期(TTL,Time to live):1位元組。每經過1個路由器,其值自動減1。 負載協議:1位元組。IP資料包負載的協議。
頭部校驗和(Header checksum):2位元組。只校驗頭部校驗和,不包括負載。 源地址(Source address):4位元組。
目標地址(Destination address):4位元組。
選項(Options):長度可變。選項列表www.iana.org/assignments/ip-parameters

使用Wireshark 任意進行抓包(可用 ip 過濾),熟悉 IP 包的結構,如:版本、頭部長度、總長度、TTL、協議型別等欄位。
在這裡插入圖片描述

✎ 問題

為提高效率,我們應該讓 IP 的頭部儘可能的精簡。但在如此珍貴的 IP 頭部你會發現既有頭部長度欄位,也有總長度欄位。請問為什麼?
答:①IP包頭長度(Header Length):長度4位元。這個欄位的作用是為了描述IP包頭的長度,因為在IP包頭中有變長的可選部分。
②IP包總長(Total Length):長度16位元。 以位元組為單位計算的IP包的長度 (包括頭部和資料),所以IP包最大長度65535位元組。
所以頭部長度可以使得接收端計算出報頭在何處結束及從何處開始讀資料;總長度是為了接收方的網路層瞭解到傳輸的資料包含哪些,如果沒有該部分,當資料鏈路層在傳輸時,對資料進行了填充,對應的網路層不會把填充的部分給去掉。

實作二 IP 包的分段與重組

根據規定,一個 IP 包最大可以有 64K 位元組。但由於 Ethernet 幀的限制,當 IP 包的資料超過 1500 位元組時就會被髮送方的資料鏈路層分段,然後在接收方的網路層重組。

預設的,ping 命令只會向對方傳送 32 個位元組的資料。我們可以使用 ping 202.202.240.16 -l 2000 命令指定要傳送的資料長度。此時使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 進行過濾),瞭解 IP 包如何進行分段,如:分段標誌、偏移量以及每個包的大小等
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

✎ 問題

分段與重組是一個耗費資源的操作,特別是當分段由傳送路徑上的節點即路由器來完成的時候,所以 IPv6 已經不允許分段了。那麼 IPv6 中,如果路由器遇到了一個大資料包該怎麼辦?
答:在IPv4的網路中,資料包在傳輸過程中,路由器會根據其設定的MTU值(最大傳輸單元,預設為1500位元組)來對資料包進行分片傳輸;而在IPv6的網路中,主機在發出資料包時,就已經對資料包進行分片處理(預設最小MTU為1280位元組),這樣在資料傳輸的過程中就不需要路由器來擔任分片工作,大大提高了資料傳輸的效率。所以路由器遇到了一個大資料包則丟棄,併傳送too big ICMP報文回傳送端;分片工作由端系統執行。

實作三 考察 TTL 事件

生存時間欄位(baitime-to-live)TTL設定了資料du報可以經過的最zhi多路由器數。它dao指定了資料包的生zhuan存時間。TTL的初始值由源主機設定(通shu常為32或64),一旦經過一個處理它的路由器,它的值就減去1。當該欄位的值為0時,資料包就被丟棄,併傳送ICMP報文通知源主機。

在 IP 包頭中有一個 TTL 欄位用來限定該包可以在 Internet上傳輸多少跳(hops),一般該值設定為 64、128等。

在驗證性實驗部分我們使用了 tracert 命令進行路由追蹤。其原理是主動設定 IP 包的 TTL 值,從 1 開始逐漸增加,直至到達最終目的主機。

請使用 tracert www.baidu.com 命令進行追蹤,此時使用 Wireshark 抓包(用 icmp 過濾),分析每個傳送包的 TTL 是如何進行改變的,從而理解路由追蹤原理。

路由追蹤原理
通過向目標傳送不同 IP 生存時間 (TTL) 值的"Internet 控制訊息協議 (ICMP)"回應資料包,Tracert診斷程式確定到目標所採取的路由。要求路徑上的每個路由器在轉發資料包之前至少將資料包上的 TTL 遞減 1。資料包上的 TTL 減為 0 時,路由器應該將"ICMP 已超時"的訊息發回源系統。
Tracert 先傳送 TTL 為 1 的回應資料包,並在隨後的每次傳送過程將 TTL 遞增 1,直到目標響應或 TTL 達到最大值,從而確定路由。通過檢查中間路由器發回的"ICMP 已超時"的訊息確定路由。某些路由器不經詢問直接丟棄 TTL 過期的資料包,這在 Tracert 實用程式中看不到。
Tracert 命令按順序列印出返回"ICMP 已超時"訊息的路徑中的近端路由器介面列表。如果使用 -d 選項,則 Tracert 實用程式不在每個 IP 地址上查詢 DNS。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

✎ 問題

在 IPv4 中,TTL 雖然定義為生命期即 Time To Live,但現實中我們都以跳數/節點數進行設定。如果你收到一個包,其 TTL 的值為 50,那麼可以推斷這個包從源點到你之間有多少跳?
答:由於TTL的值每一跳-1,所以當我收到一個包的TTL=50時,則128-50=78/64-50=14,說明經過了78/14跳。

三、傳輸層

實作一 熟悉 TCP 和 UDP 段結構

1.用 Wireshark 任意抓包(可用 tcp 過濾),熟悉 TCP 段的結構,如:源埠、目的埠、序列號、確認號、各種標誌位等欄位。

TCP 報文段結構這裡是引用
在這裡插入圖片描述

在這裡插入圖片描述

2.用 Wireshark 任意抓包(可用 udp 過濾),熟悉 UDP 段的結構,如:源埠、目的埠、長度等。

UDP 段的結構
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

✎ 問題

由上大家可以看到 UDP 的頭部比 TCP 簡單得多,但兩者都有源和目的埠號。請問源和目的埠號用來幹什麼?
答:TCP:
1)源埠(16位):標識傳送報文的計算機埠或程式。一個 TCP 報文段必須包括源埠號,使目的主機知道應該向何處傳送確認報文;
2)目的埠(16位):標識接收報文的目的主機的埠或程式。
UDP:
1)源埠(2 位元組):傳送方埠號;
2)目的埠(2 位元組 ):接收方埠號。

實作二 分析 TCP 建立和釋放連線

1.開啟瀏覽器訪問 qige.io 網站,用 Wireshark 抓包(可用 tcp 過濾後再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕獲,待頁面顯示完畢後再多等一段時間使得能夠捕獲釋放連線的包。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

2.請在你捕獲的包中找到三次握手建立連線的包,並說明為何它們是用於建立連線的,有什麼特徵。
答:第一次握手,同步位(SYN)是1,確認位(ACK)是0;第二次握手,同步位(SYN)是1,確認位(ACK)是1;
第三次握手,同步位(SYN)是0,確認位(ACK)是1。
3.請在你捕獲的包中找到四次揮手釋放連線的包,並說明為何它們是用於釋放連線的,有什麼特徵。
在這裡插入圖片描述

答:確認位(ACK)仍然為1和終止控制位(FIN)變為1。

✎ 問題一

去掉 Follow TCP Stream,即不跟蹤一個 TCP 流,你可能會看到訪問 qige.io 時我們建立的連線有多個。請思考為什麼會有多個連線?作用是什麼?
答:它們之間的連線是屬於短連線,一旦資料傳送完成後,就會斷開連線。雖然,斷開連線,但是頁面還是存在,由於頁面已經被快取下來。一旦需要重新進行傳送資料,就要再次進行連線。這樣的連線,是為了實現多個使用者進行訪問,對業務頻率不高的場合,節省通道的使用,不讓其長期佔用通道。

✎ 問題二

我們上面提到了釋放連線需要四次揮手,有時你可能會抓到只有三次揮手。原因是什麼?
答:客戶端向服務端傳送斷開連線的請求為第一次揮手,服務端向客戶端回覆同意斷開為第二次,然後服務端向客戶端傳送斷開的請求為第三次揮手,客戶端向服務端回覆同意斷開連線為第四次揮手。三次揮手是將伺服器向客戶端傳送斷開連線和回覆同意斷開連線合成一次揮手,其他兩次揮手不變。也就是說,如果對方也沒有資料發給本端,那麼對方也會傳送FIN給本端,使得二三次揮手合併為一次。

四、應用層

應用層的協議非常的多,我們只對 DNS 和 HTTP 進行相關的分析。

實作一 瞭解 DNS 解析

1.先使用 ipconfig /flushdns 命令清除快取,再使用 nslookup qige.io 命令進行解析,同時用 Wireshark 任意抓包(可用 dns 過濾)。
在這裡插入圖片描述

2.你應該可以看到當前計算機使用 UDP,向預設的 DNS 伺服器的 53 號埠發出了查詢請求,而 DNS 伺服器的 53 號埠返回了結果。
在這裡插入圖片描述
在這裡插入圖片描述

3.可瞭解一下 DNS 查詢和應答的相關欄位的含義

DNS 查詢和應答報文格式這裡是引用
16位標識欄位用於標記一對DNS查詢和應答,以此區分一個DNS應答是哪個DNS查詢的回應
16位標誌欄位用於協商具體的通訊方式和反饋通訊狀態
接下來的4個欄位則分別指出DNS報文的最後4個欄位的資源記錄數目。
對查詢報文而言,它一般包含1個查詢問題,而應答資源記錄數,授權資源記錄數和額外資源記錄數則為0.應答報文的應答資源記錄數則至少為1,而授權資源記錄數和額外資源記錄數可為0或非0。
應答欄位,授權欄位和額外資訊欄位都使用資源記錄(Resource Record,RR)格式。

✎ 問題

你可能會發現對同一個站點,我們發出的 DNS 解析請求不止一個,思考一下是什麼原因?
答:現在本地請求查詢有無對於ip,沒有的話向本地DNS伺服器請求解析,所以發出的 DNS 解析請求不止一個。

實作二 瞭解 HTTP 的請求和應答

HTTP請求報文的一般格式這裡是引用

1.開啟瀏覽器訪問 qige.io 網站,用 Wireshark 抓包(可用http 過濾再加上 Follow TCP Stream),不要立即停止 Wireshark 捕獲,待頁面顯示完畢後再多等一段時間以將釋放連線的包捕獲。
在這裡插入圖片描述

2.請在你捕獲的包中找到 HTTP 請求包,檢視請求使用的什麼命令,如:GET, POST。並仔細瞭解請求的頭部有哪些欄位及其意義。
在這裡插入圖片描述

3.請在你捕獲的包中找到 HTTP 應答包,檢視應答的程式碼是什麼,如:200, 304, 404 等。並仔細瞭解應答的頭部有哪些欄位及其意義。
在這裡插入圖片描述

在這裡插入圖片描述

✍ 建議:

HTTP 請求和應答的頭部欄位值得大家認真的學習,因為基於 Web 的程式設計中我們將會大量使用。如:將使用者認證的令牌資訊放到頭部,或者把 cookie 放到頭部等。

✎ 問題

重新整理一次 qige.io 網站的頁面同時進行抓包,你會發現不少的 304 程式碼的應答,這是所請求的物件沒有更改的意思,讓瀏覽器使用本地快取的內容即可。那麼伺服器為什麼會回答 304 應答而不是常見的 200 應答?
答:完全的將內容傳送給客服端就是200(成功)應答,而瀏覽器可以用cache對網頁的資料進行快取,不必每一項都向伺服器進行請求;通過cache快取直接到網頁就會應答304(未修改)。

五、總結

本次實驗瞭解了計算機網路的結構、以及使用的協議等。

相關文章