前言
①WireShark是非常流行的網絡封包分析軟件(一款免費開源的數據包嗅探器/分析器,用於獲取網絡上的數據包),功能十分強大。可以截取各種網絡封包,顯示網絡封包的詳細信息。
②使用WireShark的人必須了解網絡協議,否則就看不懂wireshark。
③為了安全考慮,WireShark只能查看封包,而不能修改封包的內容,或者發送封包。
④wireshark能獲取HTTP,也能獲取HTTPS,但是不能解密HTTPS,所以WireShark看不懂HTTPS中的內容,總結,如果是處理HTTP、HTTPS 還是用Fiddler抓包工具, 其他協議比如TCP,UDP 就用WireShark抓包工具。
⑤WireShark 的強大之處在於它不僅能捕獲數據包,還能對捕獲的數據進行進一步的分析。具體來說,對pcap包的分析可以分為:
過濾功能——輸入過濾規則,並顯示符合規則的分組 統計功能——對所有/部分數據包的情況進行總覽 分析功能——將某些字段作為過濾器應用&啟用/停用某些協議 查找功能——在所有/部分數據包中查找特定值 查看功能——查看字段/分組/會話的字節流
Wireshark抓包工具能做什么
- 支持實時捕獲數據並保存為pcap文件
- 支持從已經捕獲的數據包中讀取數據;
- 支持超過1000種標准/專用協議解析
- 支持創建插件解析私有協議;
- 支持使用捕獲和顯示過濾器細化數據;
- 支持TLS協議解密(設置比較復雜,不如使用charles/burp/fidder方便)
Wireshark抓包工具不能做什么
- 不支持編輯修改數據包(需要編輯數據包建議使用 WireEdit)
- 不支持入侵/檢測異常流量
wireshark抓包工具的使用
1、Wireshark 開始頁面
【注意】wireshark是捕獲機器上的某一塊網卡的網絡包(網絡包都是通過主機的網卡發出到對應的服務器上面,可以理解為應用層發出的請求網絡包由本機網卡發向指定主機上),所以當機器上有多塊網卡的時候,你需要選擇一個網卡(可以上網的那一個網卡)
點擊 Caputre->Interfaces ,出現下面對話框,選擇正確的網卡。然后點擊 Start 按鈕, 開始抓包。
與上圖對比,上圖中選擇的網卡對應的是我的主機發包的網卡。
2、Wireshark網絡封包分析軟件開始抓包示例
①wireshark啟動后,wireshark處於抓包狀態中。
②執行需要抓包的操作,如 ping www.baidu.com
③操作完成后相關數據包就抓取到了。為避免其他無用的數據包影響分析,可以通過在過濾欄設置過濾條件進行數據包列表過濾;
獲取結果如下。
說明: ip.addr == 119.75.217.26 and icmp 表示只顯示ICPM協議且源主機IP或者目的主機IP為119.75.217.26的數據包。
3、Wireshark 窗口介紹
WireShark網絡封包分析軟件 主要分為這幾個界面:
① Display Filter (顯示過濾器):用於過濾。
② Packet List Pane (封包列表):顯示捕獲到的封包, 有源地址和目標地址,端口號。 顏色不同代表抓取封包的協議不同。
③ Packet Details Pane (封包詳細信息),:顯示封包中的字段。
④ Dissector Pane (16進制數據)
⑤ Miscellanous (地址欄,雜項)
4、顏色區分Wireshark網絡封包分析軟件抓取到的不同網絡協議
說明:數據包列表區中不同的網絡協議使用了不同的顏色區分。
協議顏色標識定位在菜單欄 View ---》 Coloring Rules 。(視圖---》着色規則)如下所示:
5、過濾
①使用過濾是非常重要的, 初學者使用wireshark時,將會得到大量的冗余信息,在幾千甚至幾萬條記錄中,以至於很難找到自己需要的部分。搞得暈頭轉向。【過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。】
②Wireshark 工具的過濾器有兩種:
- 顯示過濾器:就是主界面上那個,用來在捕獲的記錄中找到所需要的記錄。(顯示過濾器如上圖)
- 捕獲過濾器:用來過濾捕獲的封包,以免捕獲太多的記錄。 在 Capture -> Capture Filters 中設置保存過濾。【在Filter欄上,填好Filter的表達式后,點擊 Save 按鈕, 取個名字。比如"Filter 102"】(如下圖)
(Filter欄上就多了個"Filter 102" 的按鈕)
③過濾表達式的規則
1、表達式規則
協議過濾
比如TCP,只顯示TCP協議
IP 過濾
比如 ip.src ==192.168.1.102:顯示源地址為192.168.1.102網絡請求封包。
比如 ip.dst==192.168.1.102: 目標地址為192.168.1.102網絡請求封包。
端口過濾
比如 tcp.port ==80:顯示端口為80的網絡請求封包。
比如 tcp.srcport == 80: 只顯示TCP協議的端口為80的網絡請求封包。
HTTP模式過濾
比如 http.request.method=="GET": 只顯示HTTP GET請求方法的網絡請求封包。
邏輯運算符為 AND/ OR
常用的過濾表達式:
4、封包列表
封包列表的面板中顯示:編號,時間戳,源地址,目標地址,協議,長度,以及封包信息。 同時不同的協議用不同的顏色顯示。
可以在 View ->Coloring Rules 中修改不同的協議顯示顏色的規則。
5、封包詳細信息
該面板用來查看網絡請求封包中的每一個字段詳情。
各行信息分別為:
Frame: 物理層的數據幀概況
Ethernet II: 數據鏈路層以太網幀頭部信息
Internet Protocol Version 4: 互聯網層IP包頭部信息
Transmission Control Protocol: 傳輸層T的數據段頭部信息,此處是TCP
Hypertext Transfer Protocol: 應用層的信息,此處是HTTP協議。
6、TCP包的具體內容
從下圖可以看到wireshark網絡封包分析軟件捕獲到的TCP包中的每個字段。
Wireshark過濾器設置
初學者使用wireshark網絡封包分析軟件時,將會得到大量的冗余數據包列表,以至於很難找到自己自己抓取的數據包部分。wireshar工具中自帶了兩種類型的過濾器,學會使用這兩種過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。
①抓包過濾器
捕獲過濾器的菜單欄路徑為 Capture --> Capture Filters 。用於在抓取數據包前設置。
如何使用?可以在抓取數據包前設置如下。
ip host 60.207.246.216 and icmp 表示只捕獲主機IP為60.207.246.216的ICMP數據包。獲取結果如下:
②顯示過濾器
1)顯示過濾器是 Wirshark 最強大的分析工具之一,可以輸入規則過濾出符合規則的分組,並顯示在分組列表中。配合其他功能可以達成 1+1>2 的效果。
2)Wireshark 的顯示過濾規則由三要素組成: 字段名稱 - 關系 - 值 (字段名是必須項)
3)顯示過濾器是用於在抓取數據包后設置過濾條件進行過濾數據包。
4)通常是在抓取數據包時設置條件相對寬泛,抓取的數據包內容較多時使用顯示過濾器設置條件顧慮以方便分析。
5)打開顯示過濾器表達式窗口,可以看到 Wireshark 支持的各種字段和邏輯關系: (善用搜索可以快速找到字段)
顯示過濾器支持的邏輯關系符號含義總結如下:
6)實例:同樣上述場景,在捕獲時未設置捕獲規則直接通過網卡進行抓取所有數據包,如下:
執行 ping www.huawei.com 獲取的數據包列表如下:
觀察上述獲取的數據包列表,含有大量的無效數據。這時可以通過設置顯示器過濾條件進行提取分析信息: ip.addr == 211.162.2.183 and icmp 。並進行過濾。
上述介紹了抓包過濾器和顯示過濾器的基本使用方法。在組網不復雜或者流量不大情況下,使用顯示器過濾器進行抓包后處理就可以滿足我們使用。下面介紹一下兩者間的語法以及它們的區別。
7) 顯示過濾器欄的顏色提示規則語法的正確程度:
(去掉引號后,過濾規則依然成立,顯示綠色)
綠色:表示語法正確,可以應用;
黃色:表示語法有歧義,但可以應用;
紅色:表示語法有問題,且無法應用。
8)常用的顯示過濾規則作為參考:
wireshark過濾器表達式的規則
1、抓包過濾器語法和實例
抓包過濾器類型Type(host、net、port)、方向Dir(src、dst)、協議Proto(ether、ip、tcp、udp、http、icmp、ftp等)、邏輯運算符(&& 與、|| 或、!非)
①協議過濾:
直接在抓包過濾框中直接輸入協議名即可。
- TCP :只顯示TCP協議的數據包列表
- HTTP :只查看HTTP協議的數據包列表
- ICMP :只顯示ICMP協議的數據包列表
②IP過濾
- host 192.168.1.104 :只顯示源地址或者目的地址為192.168.1.104的數據包列表
- src host 192.168.1.104 :只顯示源地址為192.168.1.104的數據包列表
- dst host 192.168.1.104 :只顯示目的地址為192.168.1.104的數據包列表
③端口過濾
- port 80 :只顯示源地址端口號或者目的地址端口號為80的端口
- src port 80 :只顯示源地址端口號為80的端口
- dst port 80 :只顯示目的地址端口號為80的端口
④邏輯運算符&& 與、|| 或、!非
- 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、顯示過濾器語法和實例
①比較操作符
比較操作符有== 等於、!= 不等於、> 大於、< 小於、>= 大於等於、<=小於等於。
②協議過濾
直接在Filter框中直接輸入協議名即可。【注意】:協議名稱需要輸入小寫。
- tcp ,只顯示TCP協議的數據包列表
- http ,只查看HTTP協議的數據包列表
- icmp ,只顯示ICMP協議的數據包列表
③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的數據包列表
④端口過濾
tcp.port ==80 :顯示源主機或者目的主機端口為80的數據包列表。
tcp.srcport == 80 :只顯示TCP協議的源主機端口為80的數據包列表。
tcp.dstport == 80 :只顯示TCP協議的目的主機端口為80的數據包列表。
⑤Http模式過濾
- http.request.method=="GET" :只顯示HTTP網絡協議的GET請求方法數據包列表。
⑥邏輯運算符為 and/or/not
過濾多個條件組合時,使用and/or。比如獲取IP地址為192.168.1.104的ICMP數據包表達式為ip.addr == 192.168.1.104 and icmp
⑦按照數據包內容過濾
假設我要以IMCP層中的內容進行過濾,可以單擊選中界面中的碼流,在下方進行選中數據。如下:
右鍵單擊選中后出現如下界面:
選中Select后在過濾器中顯示如下:
后面條件表達式就需要自己填寫。
如下我想過濾出data數據包中包含"abcd"內容的數據流。包含的關鍵詞是 contains 后面跟上內容。
TCP協議三次握手的示例:
三次握手原理:
①Step1:客戶端發送一個SYN=1,ACK=0標志的數據包給服務端,請求進行連接,這是第一次握手;
②Step2:服務端收到請求並且允許連接的話,就會發送一個SYN=1,ACK=1標志的數據包給發送端,告訴它,可以通訊了,並且讓客戶端發送一個確認數據包,這是第二次握手;
③Step3:服務端發送一個SYN=0,ACK=1的數據包給客戶端端,告訴它連接已被確認,這就是第三次握手。TCP連接建立,開始通訊。
三次握手過程:
用wireshark實際分析下三次握手的過程:
打開wireshark, 打開瀏覽器輸入 http://www.cr173.com。
在wireshark中輸入http過濾, 然后選中GET /tankxiao HTTP/1.1的那條記錄,右鍵然后點擊 Follow TCP Stream 。(這樣做的目的是為了得到與瀏覽器打開網站相關的數據包)
圖中可以看到wireshark截獲到了三次握手的三個數據包。第四個包才是HTTP的, 這說明HTTP的確是使用TCP建立連接的。
第一次握手數據包:
客戶端發送一個TCP,標志位為SYN,序列號為0, 代表客戶端請求建立連接。 如下圖:
第二次握手的數據包:
服務器發回確認包,,標志位為 SYN、ACK。 將確認序號(Acknowledgement Number)設置為客戶的I S N加1以,即0+1=1, 如下圖:
第三次握手的數據包:
客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1;並且把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.並且在數據段放寫ISN的+1,如下圖:
就這樣通過了TCP三次握手,建立了連接。
WireShark抓包獲取訪問指定服務端數據包
如下圖是web訪問某一個網址抓到的數據包。
圖中可以看到WireShark截獲到了TCP三次握手的三個數據包。第四個包是HTTP數據包, 這說明HTTP的確是使用TCP建立連接的。
第一次握手數據包
客戶端發送一個TCP,標志位為SYN,序列號為0, 代表客戶端請求建立連接。 如下圖:
數據包的關鍵屬性如下: SYN :標志位,表示請求建立連接。 Seq = 0 :初始建立連接值為0,數據包的相對序列號從0開始,表示當前還沒有發送數據。 Ack =0:初始建立連接值為0,已經收到包的數量,表示當前沒有接收到數據。
第二次握手的數據包
服務器發回確認包,標志位為 SYN,ACK。將確認序號(Acknowledgement Number)設置為客戶的ISN加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層,有個FLAGS字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG。如下:
其中,對於我們日常的分析有用的就是前面的五個字段。它們的含義是:SYN表示建立連接,FIN表示關閉連接,ACK表示響應,PSH表示有DATA數據傳輸,RST表示連接重置。
轉載自:https://blog.csdn.net/qq78069460/article/details/79153895
詳細鏈接:https://www.cnblogs.com/mq0036/p/11187138.html
待完善:https://www.bilibili.com/read/cv15076127?spm_id_from=333.999.0.0