一站式學習Wireshark(二):應用Wireshark觀察基本網路協議
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,SMTP,FTP。
更改為十六進位制Dump模式檢視載荷的十六進位制程式碼,如下圖所示:
關閉彈出視窗,Wireshark就只顯示所選TCP報文流。現在可以輕鬆分辨出3次握手訊號。
注意:這裡Wireshark自動為此TCP會話建立了一個顯示過濾。本例中:(ip.addr eq 192.168.1.2 and ip.addr eq 209.85.227.19) and (tcp.port eq 80 and tcp.port eq 52336)
SYN報文:
圖中顯示的5號報文是從客戶端傳送至伺服器端的SYN報文,此報文用於與伺服器建立同步,確保客戶端和伺服器端的通訊按次序傳輸。SYN報文的頭部有一個32 bit序列號。底端對話方塊顯示了報文一些有用資訊如報文型別,序列號。
SYN/ACK報文:
7號報文是伺服器的響應。一旦伺服器接收到客戶端的SYN報文,就讀取報文的序列號並且使用此編號作為響應,也就是說它告知客戶機,伺服器接收到了SYN報文,通過對原SYN報文序列號加一併且作為響應編號來實現,之後客戶端就知道伺服器能夠接收通訊。
ACK報文:
8號報文是客戶端對伺服器傳送的確認報文,告訴伺服器客戶端接收到了SYN/ACK報文,並且與前一步一樣客戶端也將序列號加一,此包傳送完畢,客戶端和伺服器進入
ARP & ICMP:
開啟Wireshark抓包。開啟Windows控制檯視窗,使用ping命令列工具檢視與相鄰機器的連線狀況。
停止抓包之後,Wireshark如下圖所示。
ARP和ICMP報文相對較難辨認,建立只顯示ARP或ICMP的過濾條件。
ARP報文:
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取實體地址的一個TCP/IP協議。其功能是:主機將ARP請求廣播到網路上的所有主機,並接收返回訊息,確定目標IP地址的實體地址,同時將IP地址和硬體地址存入本機ARP快取中,下次請求時直接查詢ARP快取。
最初從PC發出的ARP請求確定IP地址192.168.1.1的MAC地址,並從相鄰系統收到ARP回覆。ARP請求之後,會看到ICMP報文。
ICMP報文:
網路控制訊息協定(Internet Control Message Protocol,ICMP)用於TCP/IP網路中傳送控制訊息,提供可能發生在通訊環境中的各種問題反饋,通過這些資訊,令管理者可以對所發生的問題作出診斷,然後採取適當的措施解決。
PC傳送echo請求,收到echo回覆如上圖所示。ping報文被mark成Type 8,回覆報文mark成Type 0。
如果多次ping同一系統,在PC上刪除ARP cache,使用如下ARP命令之後,會產生一個新的ARP請求。
C:\> ping 192.168.1.1
… ping output …
C:\> arp –d *
HTTP:
HTTP協議是目前使用最廣泛的一種基礎協議,這得益於目前很多應用都基於WEB方式,實現容易,軟體開發部署也簡單,無需額外的客戶端,使用瀏覽器即可使用。這一過程開始於請求伺服器傳送網路檔案。
從上圖可見報文中包括一個GET命令,當HTTP傳送初始GET命令之後,TCP繼續資料傳輸過程,接下來的連結過程中HTTP會從伺服器請求資料並使用TCP將資料傳回客戶端。傳送資料之前,伺服器通過傳送HTTP OK訊息告知客戶端請求有效。如果伺服器沒有將目標傳送給客戶端的許可,將會返回403 Forbidden。如果伺服器找不到客戶端所請求的目標,會返回404。
如果沒有更多資料,連線可被終止,類似於TCP三次握手訊號的SYN和ACK報文,這裡傳送的是FIN和ACK報文。當伺服器結束傳送資料,就傳送FIN/ACK給客戶端,此報文表示結束連線。接下來客戶端返回ACK報文並且對FIN/ACK中的序列號加1。這就從伺服器端終止了通訊。要結束這一過程客戶端必須重新對伺服器端發起這一過程。必須在客戶端和伺服器端都發起並確認FIN/ACK過程。