wireshark抓包教程详解
Wireshark軟件安裝
??軟件下載路徑:wireshark官網。按照系統版本選擇下載,下載完成后,按照軟件提示一路Next安裝。
? 說明:如果你是Win10系統,安裝完成后,選擇抓包但是不顯示網卡,下載win10pcap兼容性安裝包。下載路徑:win10pcap兼容性安裝包
Wireshark 開始抓包示例
?? 先介紹一個使用wireshark工具抓取ping命令操作的示例,讓讀者可以先上手操作感受一下抓包的具體過程。
? 1、打開wireshark 2.6.5,主界面如下:
??2、選擇菜單欄上Capture -> Option,勾選WLAN網卡(這里需要根據各自電腦網卡使用情況選擇,簡單的辦法可以看使用的IP對應的網卡)。點擊Start。啟動抓包。
? 3、wireshark啟動后,wireshark處于抓包狀態中。
? 4、執行需要抓包的操作,如在cmd窗口下執行ping www.baidu.com。
? 5、操作完成后相關數據包就抓取到了。為避免其他無用的數據包影響分析,可以通過在過濾欄設置過濾條件進行數據包列表過濾,獲取結果如下。說明:ip.addr == 119.75.217.26 and icmp 表示只顯示ICPM協議且源主機IP或者目的主機IP為119.75.217.26的數據包。說明:協議名稱icmp要小寫。
? 5、wireshark抓包完成,就這么簡單。關于wireshark顯示過濾條件、抓包過濾條件、以及如何查看數據包中的詳細內容在后面介紹。
Wireshakr抓包界面介紹
? 說明:數據包列表區中不同的協議使用了不同的顏色區分。協議顏色標識定位在菜單欄View --> Coloring Rules。如下所示
WireShark 主要分為這幾個界面
? 1. Display Filter(顯示過濾器),? 用于設置過濾條件進行數據包列表過濾。菜單路徑:Analyze -->?Display Filters。
? 2. Packet List Pane(數據包列表), 顯示捕獲到的數據包,每個數據包包含編號,時間戳,源地址,目標地址,協議,長度,以及數據包信息。 不同協議的數據包使用了不同的顏色區分顯示。
? 3. Packet Details Pane(數據包詳細信息), 在數據包列表中選擇指定數據包,在數據包詳細信息中會顯示數據包的所有詳細信息內容。數據包詳細信息面板是最重要的,用來查看協議中的每一個字段。各行信息分別為
? (1)Frame:???物理層的數據幀概況
? (2)Ethernet?II:?數據鏈路層以太網幀頭部信息
? (3)Internet Protocol Version 4:?互聯網層IP包頭部信息
? (4)Transmission Control Protocol:??傳輸層T的數據段頭部信息,此處是TCP
? (5)Hypertext Transfer Protocol:??應用層的信息,此處是HTTP協議
TCP包的具體內容
?從下圖可以看到wireshark捕獲到的TCP包中的每個字段。
? 4. Dissector Pane(數據包字節區)。
Wireshark過濾器設置
?? 初學者使用wireshark時,將會得到大量的冗余數據包列表,以至于很難找到自己需要抓取的數據包部分。wireshark工具中自帶了兩種類型的過濾器,學會使用這兩種過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。
(1)抓包過濾器
??? 捕獲過濾器的菜單欄路徑為Capture --> Capture Filters。用于在抓取數據包前設置。
?如何使用?可以在抓取數據包前設置如下。
ip host 60.207.246.216 and icmp表示只捕獲主機IP為60.207.246.216的ICMP數據包。獲取結果如下:
(2)顯示過濾器
? 顯示過濾器是用于在抓取數據包后設置過濾條件進行過濾數據包。通常是在抓取數據包時設置條件相對寬泛或者沒有設置導致抓取的數據包內容較多時使用顯示過濾器設置條件過濾以方便分析。同樣上述場景,在捕獲時未設置抓包過濾規則直接通過網卡進行抓取所有數據包,如下
執行ping www.huawei.com獲取的數據包列表如下
觀察上述獲取的數據包列表,含有大量的無效數據。這時可以通過設置顯示器過濾條件進行提取分析信息。ip.addr == 211.162.2.183 and icmp。并進行過濾。
??上述介紹了抓包過濾器和顯示過濾器的基本使用方法。在組網不復雜或者流量不大情況下,使用顯示器過濾器進行抓包后處理就可以滿足我們使用。下面介紹一下兩者間的語法以及它們的區別。
wireshark過濾器表達式的規則
1、抓包過濾器語法和實例
?? 抓包過濾器類型Type(host、net、port)、方向Dir(src、dst)、協議Proto(ether、ip、tcp、udp、http、icmp、ftp等)、邏輯運算符(&& 與、|| 或、!非)
(1)協議過濾
? 比較簡單,直接在抓包過濾框中直接輸入協議名即可。
? tcp,只顯示TCP協議的數據包列表
? http,只查看HTTP協議的數據包列表
? icmp,只顯示ICMP協議的數據包列表
(2)IP過濾
? host 192.168.1.104
? src host?192.168.1.104
? dst host?192.168.1.104
(3)端口過濾
? port 80
? src port 80
? dst port 80
(4)邏輯運算符&& 與、|| 或、!非
? src host 192.168.1.104 && dst port 80 抓取主機地址為192.168.1.80、目的端口為80的數據包
??host 192.168.1.104 || host 192.168.1.102 抓取主機為192.168.1.104或者192.168.1.102的數據包
? !broadcast 不抓取廣播數據包
2、顯示過濾器語法和實例
(1)比較操作符
? 比較操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于。
(2)協議過濾
? 比較簡單,直接在Filter框中直接輸入協議名即可。注意:協議名稱需要輸入小寫。
? tcp,只顯示TCP協議的數據包列表
? http,只查看HTTP協議的數據包列表
? icmp,只顯示ICMP協議的數據包列表
(3) ip過濾
?? ip.src ==192.168.1.104 顯示源地址為192.168.1.104的數據包列表
?? ip.dst==192.168.1.104, 顯示目標地址為192.168.1.104的數據包列表
?? ip.addr == 192.168.1.104 顯示源IP地址或目標IP地址為192.168.1.104的數據包列表
(4)端口過濾
? tcp.port ==80,? 顯示源主機或者目的主機端口為80的數據包列表。
? tcp.srcport == 80,? 只顯示TCP協議的源主機端口為80的數據包列表。
? tcp.dstport == 80,只顯示TCP協議的目的主機端口為80的數據包列表。
(5) Http模式過濾
? http.request.method=="GET",?? 只顯示HTTP GET方法的。
(6)邏輯運算符為 and/or/not
? 過濾多個條件組合時,使用and/or。比如獲取IP地址為192.168.1.104的ICMP數據包表達式為ip.addr == 192.168.1.104 and icmp
(7)按照數據包內容過濾。假設我要以IMCP層中的內容進行過濾,可以單擊選中界面中的碼流,在下方進行選中數據。如下
右鍵單擊選中后出現如下界面
選中Select后在過濾器中顯示如下
后面條件表達式就需要自己填寫。如下我想過濾出data數據包中包含"abcd"內容的數據流。包含的關鍵詞是contains 后面跟上內容。
看到這, 基本上對wireshak有了初步了解。
Wireshark抓包分析TCP三次握手
(1)TCP三次握手連接建立過程
??? Step1:客戶端發送一個SYN=1,ACK=0標志的數據包給服務端,請求進行連接,這是第一次握手;
??? Step2:服務端收到請求并且允許連接的話,就會發送一個SYN=1,ACK=1標志的數據包給發送端,告訴它,可以通訊了,并且讓客戶端發送一個確認數據包,這是第二次握手;
?? Step3:服務端發送一個SYN=0,ACK=1的數據包給客戶端端,告訴它連接已被確認,這就是第三次握手。TCP連接建立,開始通訊。
(2)wireshark抓包獲取訪問指定服務端數據包
??? Step1:啟動wireshark抓包,打開瀏覽器輸入www.huawei.com。
??? Step2:使用ping www.huawei.com獲取IP。
??? Step3:輸入過濾條件獲取待分析數據包列表 ip.addr == 211.162.2.183
? 圖中可以看到wireshark截獲到了三次握手的三個數據包。第四個包才是HTTP的, 這說明HTTP的確是使用TCP建立連接的。
第一次握手數據包
客戶端發送一個TCP,標志位為SYN,序列號為0, 代表客戶端請求建立連接。 如下圖。
數據包的關鍵屬性如下:
? SYN :標志位,表示請求建立連接
? Seq = 0 :初始建立連接值為0,數據包的相對序列號從0開始,表示當前還沒有發送數據
? Ack =0:初始建立連接值為0,已經收到包的數量,表示當前沒有接收到數據
第二次握手的數據包
服務器發回確認包, 標志位為 SYN,ACK. 將確認序號(Acknowledgement Number)設置為客戶的I S N加1以.即0+1=1, 如下圖
?數據包的關鍵屬性如下:
? [SYN + ACK]: 標志位,同意建立連接,并回送SYN+ACK
? Seq = 0 :初始建立值為0,表示當前還沒有發送數據
? Ack = 1:表示當前端成功接收的數據位數,雖然客戶端沒有發送任何有效數據,確認號還是被加1,因為包含SYN或FIN標志位。(并不會對有效數據的計數產生影響,因為含有SYN或FIN標志位的包并不攜帶有效數據)
第三次握手的數據包
? 客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1.并且把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.并且在數據段放寫ISN的+1, 如下圖:
數據包的關鍵屬性如下:
? ACK :標志位,表示已經收到記錄
? Seq = 1 :表示當前已經發送1個數據
? Ack = 1 : 表示當前端成功接收的數據位數,雖然服務端沒有發送任何有效數據,確認號還是被加1,因為包含SYN或FIN標志位(并不會對有效數據的計數產生影響,因為含有SYN或FIN標志位的包并不攜帶有效數據)。
? 就這樣通過了TCP三次握手,建立了連接。開始進行數據交互
下面針對數據交互過程的數據包進行一些說明:
數據包的關鍵屬性說明
? Seq: 1
? Ack: 1: 說明現在共收到1字節數據
? Seq: 1
? Ack: 951: 說明現在服務端共收到951字節數據
TCP的六種狀態:SYN, FIN, ACK, PSH, RST, URG?
? 在TCP層,有個FLAGS字段,這個字段有以下幾個標識:SYN(synchronous), FIN(Finish), ACK(Acknowledge?), PSH(Push), RST(Reset), URG(Urgent)。如下
??? 其中,對于我們日常的分析有用的就是前面的五個字段。它們的含義是:SYN表示建立連接,FIN表示關閉連接,ACK表示響應,PSH表示有DATA數據傳輸,RST表示連接重置。
Wireshark抓包分析TCP四次揮手
四次揮手標志分別為:
- "[FIN, ACK]"
- "[ACK]"
- "[FIN, ACK]"
- "[ACK]"
這里,我們需要注意兩點:
(1)客戶端與服務器端傳輸時全雙工的,因此斷開請求既可以由客戶端發起,也可以由服務器端發起。只要找準第一次出現"[FIN, ACK]"的位置,就是第一次揮手位置。
(2)為什么我們抓包抓到的不是“四次揮手”,而是“三次揮手”呢?
這里涉及到LInux的TCP時延機制,當被揮手端(這里是12672端口)第一次收到揮手端(這里是443端口)的“FIN”請求時,并不會立即發送ACK,而是會經過一段延遲時間后再發送,但是此時被揮手端也沒有數據發送,就會向揮手端發送“FIN"請求,這里就可能造成被揮手端發送的“FIN”與“ACK”一起被揮手端收到,導致出現“第二、三次揮手”合并為一次的現象,也就最終呈現出“三次揮手”的情況。
三次握手:
第一次握手:客戶端發送syn包(seq=x)到服務器,并進入SYN_SENT狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。
?
四次揮手:
與建立連接的“三次握手”類似,斷開一個TCP連接則需要“四次握手”。
第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發數據了(當然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),但是,此時主動關閉方還可 以接受數據。
第二次揮手:被動關閉方收到FIN包后,發送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號)。
第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
第四次揮手:主動關閉方收到FIN后,發送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。
首先我們需要把瀏覽器的頁面關閉,也就是斷開TCP/IP連接,之后等待幾分鐘。會出現下面的畫面,方框就是“揮手”過程。
FAQ:使用wireshark出現很多TCP Retransmission信息
出現TCP Retransmission多數是因為目標主機的端口沒開有開放監聽,很少出現是網絡不好導致的。
如果在某個時間段(RTT的倍數)內沒有確認發送的數據,則將數據重新傳輸到遠程主機。重傳超時從RTT開始,并隨著每次重傳而增加一倍。重傳超時總是受限于CFGZ-MNRTO和CFGYMax RTO。如果自從第一次傳輸數據以來,CFGY-ReTrExtTMO時間就過去了,連接被關閉,即狀態被設置為關閉。注意,當一個套接字被關閉時,將響應于接收到的端口所發送的任何數據包來發送重置。
當超時發生時,將重新發送輸出窗口中的所有未確認數據。數據被重新打包,因此,包將不與原始包相同。例如,如果以10字節的數據發送分組,則發送具有30字節數據的分組,并且第一分組丟失,40字節的未確認數據將在輸出窗口中。當超時發生時,所有40個字節將在一個分組中發送(假設MSS大于或等于40)。
如果接收到三個重復的確認,則快速重傳算法無需等待超時即可重傳TCP數據。RTIP32還實現了RFC 2582中定義的NeReNeO快速恢復算法。
轉載:https://blog.csdn.net/lemontree1945/article/details/88581516
類似場景:client 連接服務器時,因 TLS 證書設置錯誤,所以會導致連接服務器后,沒有收到應答;即發送 SYN 報文,無響應。
Wireshark分析常用操作
? 調整數據包列表中時間戳顯示格式。調整方法為View -->Time Display Format --> Date and Time of Day。調整后格式如下:
參考文檔
(1)wireshark抓包詳細圖文教程
總結
以上是生活随笔為你收集整理的wireshark抓包教程详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google chrome浏览器保存离线
- 下一篇: centos7 greenplum6.1