弱電學習圈VIP群8群已經建立 ,歡迎大家進群後討論技術問題,設計方案,投標、施工,工程合作,產品對接等方面,都可以。其中 VIP群 裏大部份人員都是工程商,施工分包商,設計院設計師,公司老板,技術總監、廠家、甲方等。
一、 wireshark是什麽?
wireshark是非常流行的網路封包分析軟體,簡稱小鯊魚,功能十分強大。可以截取各種網路封包,顯示網路封包的詳細資訊。
wireshark是開源軟體,可以放心使用。可以執行在Windows和Mac OS上。對應的,linux下的抓包工具是 tcpdump。使用wireshark的人必須了解網路協定,否則就看不懂wireshark了。
二、 Wireshark常用套用場景
1. 網路管理員會使用wireshark來檢查網路問題
2. 軟體測試工程師使用wireshark抓包,來分析自己測試的軟體
3. 從事socket編程的工程師會用wireshark來偵錯
4. 運維人員用於日常工作,應急響應等等
總之跟網路相關的東西,都可能會用到 wireshark
三、 Wireshark抓包原理
Wireshark使用WinPCAP作為介面,直接與網卡進行資料包交換。
Wireshark使用的環境大致分為兩種,一種是電腦直連網路的單機環境,另外一種就是套用比較多的網路環境,即連線交換機的情況。
「單機情況」下, Wireshark直接抓取本機網卡的網路流量;
「交換機情況」下, Wireshark透過埠映像、ARP欺騙等方式獲取區域網路中的網路流量。
埠映像:利用交換機的介面,將區域網路的網路流量轉發到指定電腦的網卡上。
ARP欺騙:交換機根據MAC地址轉發數據,偽裝其他終端的MAC地址,從而獲取區域網路的網路流量。
四、 Wireshark軟體安裝
軟體下載路徑:
https://www.wireshark.org/
按照系統版本選擇下載,下載完成後,按照軟體提示一路 Next安裝。
五、Wireshark抓包範例
先介紹一個使用wireshark工具抓取ping命令操作的範例,可以上手操作感受一下抓包的具體過程。
1、開啟wireshark,主界面如下:
2、選擇選單欄上 捕獲 -> 選項 ,勾選WLAN網卡 。 這裏需要根據各自電腦網卡使用情況選擇,簡單的辦法可以看使用的IP對應的網卡。點選Start , 啟動抓包。
3、wireshark啟動後,wireshark處於抓包狀態中。
4、執行需要抓包的操作,如在cmd視窗下執行ping www.baidu.com 。
5、操作完成後相關封包就抓取到了 ,可以點選 停止捕獲分組 按鈕 。
6、 為避免其他無用的封包影響分析,可以透過在過濾欄設定過濾條件進行封包列表過濾,獲取結果如下。說明:ip.addr == 183.232.231.172 and icmp 表示只顯示ICPM協定且主機IP為183.232.231.172的封包。說明:協定名稱icmp要小寫。
7、wireshark抓包完成, 並 把本次抓包或者分析的結果進行保存 , 就這麽簡單。關於wireshark顯示過濾條件、抓包過濾條件、以及如何檢視封包中的詳細內容在後面介紹。
六、 Wireshakr抓包界面介紹
Wireshark 的主界麵包含6個部份:
選單欄 :用於偵錯、配置
工具列 :常用功能的捷徑
過濾欄 :指定過濾條件,過濾封包
封包列表 :核心區域,每一行就是一個封包
封包詳情 :封包的詳細數據
封包字節 :封包對應的字節流,二進制
說明:封包列表區中不同的協定使用了不同的顏色區分。協定顏色標識定位在選單欄 檢視 --> 著色規則 。如下所示
WireShark 主要分為這幾個界面
1. Display Filter(顯示過濾器)
用於設定過濾條件進行封包列表過濾。選單路徑: 分析 --> 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. 抓包過濾器
捕獲過濾器的選單欄路徑為 捕獲 --> 捕獲過濾器 。用於在抓取封包前設定。
如何使用 呢 ?設定如下。
ip host 183.232.231.172表示只捕獲主機IP為183.232.231.172的封包。獲取結果如下:
2 . 顯示過濾器
顯示過濾器是用於在抓取封包後設定過濾條件進行過濾封包。
通常是在抓取封包時設定條件相對寬泛或者沒有設定導致抓取的封包內容較多時使用顯示過濾器設定條件過濾以方便分析。
同樣上述場景,在捕獲時未設定抓包過濾規則直接透過網卡進行抓取所有封包 。
執行ping www. baidu .com獲取的封包列表如下
觀察上述獲取的封包列表,含有大量的無效數據。這時可以透過設定顯視器過濾條件進行提取分析資訊。ip.addr == 183.232.231.172 , 並進行過濾。
上述介紹了抓包過濾器和顯示過濾器的基本使用方法。在組網不復雜或者流量不大情況下,使用顯視器過濾器進行抓包後處理就可以滿足我們使用。下面介紹一下兩者間的語法以及它們的區別。
八、 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 ==112.53.42.42 顯示源地址為112.53.42.42的封包列表
ip.dst==112.53.42.42, 顯示目標地址為112.53.42.42的封包列表
ip.addr == 112.53.42.42 顯示源IP地址或目標IP地址為112.53.42.42的封包列表
(4)埠過濾
tcp.port ==80, 顯示源主機或者目的主機埠為80的封包列表。
tcp.srcport == 80, 只顯示TCP協定的源主機埠為80的封包列表。
tcp.dstport == 80,只顯示TCP協定的目的主機埠為80的封包列表。
(5) h ttp模式過濾
http.request.method=="GET", 只顯示HTTP GET方法的。
(6)邏輯運算子為 and/or/not
過濾多個條件組合時,使用and/or。比如獲取IP地址為192.168.0.104的ICMP封包運算式為ip.addr == 192.168.0.104 and icmp
(7)按照封包內容過濾
假設我要以ICMP層中的內容進行過濾,可以單擊選中界面中的碼流,在下方進行選中數據。
右鍵單擊選中後出現如下界面
選中後在過濾器中顯示如下
後面條件運算式就需要自己填寫。如下我想過濾出data封包中包含"abcd"內容的數據流。關鍵詞是contains ,完整條件運算式為 data contains "abcd"
看到這, 基本上對wireshak有了初步了解。
3 . 常見用顯示過濾需求及其對應運算式
數據鏈路層 :
篩選mac地址為04:f9:38:ad:13:26的封包
eth.src == 04:f9:38:ad:13:26
篩選源mac地址為04:f9:38:ad:13:26的封包----
eth.src == 04:f9:38:ad:13:26
網路層 :
篩選ip地址為192.168.1.1的封包
ip.addr == 192.168.1.1
篩選192.168.1.0網段的數據
ip contains "192.168.1"
傳輸層:
篩選埠為80的封包
tcp.port == 80
篩選12345埠和80埠之間的封包
tcp.port == 12345 &&tcp.port == 80
篩選從12345埠到80埠的封包
tcp.srcport == 12345 &&tcp.dstport == 80
套用層 :
特別說明: http中http.request表示請求頭中的第一行(如GET index.jsp HTTP/1.1) http.response表示響應頭中的第一行(如HTTP/1.1 200 OK),其他頭部都用http.header_name形式。
篩選url中包含.php的http封包
http.request.uri contains ".php"
篩選內容包含username的http封包
http contains "username"
九、 Wireshark抓包分析TCP三次握手
1 . TCP三次握手連線建立過程
Step1:客戶端發送一個SYN=1,ACK=0標誌的封包給伺服端,請求進行連線,這是第一次握手;
Step2:伺服端收到請求並且允許連線的話,就會發送一個SYN=1,ACK=1標誌的封包給發送端,告訴它,可以通訊了,並且讓客戶端發送一個確認封包,這是第二次握手;
Step3:伺服端發送一個SYN=0,ACK=1的封包給客戶端端,告訴它連線已被確認,這就是第三次握手。TCP連線建立,開始通訊。
2 . W ireshark抓包獲取存取指定伺服端封包
Step1:啟動wireshark抓包,開啟瀏覽器輸入www. baidu .com。
Step2:使用ping www. baidu .com獲取IP。
Step3:輸入過濾條件獲取待分析封包列表 ip.addr == 183.232.231.172
圖中可以看到wireshark截獲到了三次握手的三個封包。第四個包才是HTTPS的, 這說明HTTPS的確是使用TCP建立連線的。
第一次握手封包
客戶端發送一個TCP,標誌位為SYN,序列號為0, 代表客戶端請求建立連線。
封包的關鍵內容如下:
SYN :標誌位,表示請求建立連線
Seq = 0 :初始建立連線值為0,封包的相對序列號從0開始,表示當前還沒有發送數據
Ack =0:初始建立連線值為0,已經收到包的數量,表示當前沒有接收到數據
第二次握手的封包
伺服器發回確認包, 標誌位為 SYN , ACK 。 將確認序號(Acknowledgement Number) 欄位+ 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 , 放在確定欄位中發送給對方 , 並且在 Flag 段寫ACK的+1 :
封包的關鍵內容如下:
ACK :標誌位,表示已經收到記錄
Seq = 1 :表示當前已經發送1個數據
Ack = 1 : 表示當前端成功接收的數據位數,雖然伺服端沒有發送任何有效數據,確認號還是被加1,因為包含SYN或FIN標誌位(並不會對有效數據的計數產生影響,因為含有SYN或FIN標誌位的包並不攜帶有效數據)。
就這樣透過了TCP三次握手,建立了連線。開始進行數據互動
十、 Wireshark分析常用操作
調整封包列表中時間戳顯示格式。調整方法為 檢視 --> 時間顯示格式 --> 日期和時間 。調整後格式如下:
一般Wireshark軟體也可以與各主流廠家的模擬器一起使用,更適合於計畫準確配置。