【工具】719- Wireshark抓包使用指南

作者:Ju5tice
https://zhuanlan.zhihu.com/p/82498482
作為一款高效免費(fèi)的抓包工具,wireshark可以捕獲并描述網(wǎng)絡(luò)數(shù)據(jù)包,其最大的優(yōu)勢就是免費(fèi)、開源以及多平臺支持,在GNU通用公共許可證的保障范圍下,用戶可以免費(fèi)獲取軟件和代碼,并擁有對其源碼修改和定制的權(quán)利,如今其已是全球最廣泛的網(wǎng)絡(luò)數(shù)據(jù)包分析軟件之一。
0x01.Wireshark可以做什么
網(wǎng)絡(luò)管理員使用Wireshark檢測網(wǎng)絡(luò)問題
網(wǎng)安工程師用Wireshark檢查信息安全相關(guān)問題
開發(fā)者使用Wireshark為新的通信協(xié)議調(diào)試
普通用戶使用Wireshark學(xué)習(xí)網(wǎng)絡(luò)協(xié)議相關(guān)知識
憨憨學(xué)生使用Wireshark應(yīng)付TCP/IP課程要求
0x02.Wireshark不可以做什么
-Wireshark不是入侵偵測軟件(Intrusion Detection Software, IDS)。對于網(wǎng)絡(luò)上的異常流量行為,Wireshark不會產(chǎn)生警示或是任何提示。然而,仔細(xì)分析Wireshark截取的數(shù)據(jù)包能夠幫助用戶對于網(wǎng)絡(luò)行為有更清楚的了解。
Wireshark不會對網(wǎng)絡(luò)數(shù)據(jù)包產(chǎn)生內(nèi)容的修改 - 它只會反映出當(dāng)前流通的數(shù)據(jù)包信息。Wireshark本身也不會提交數(shù)據(jù)包至網(wǎng)絡(luò)上。就是說你只能查看數(shù)據(jù)包,不能修改或轉(zhuǎn)發(fā)。
0x03.哪里下載
開源軟件請去它的官網(wǎng)下載wireshark,有Mac跟Window版
下載完成后一路next,如果win10系統(tǒng)選擇抓包但不顯示網(wǎng)卡,需要下載win10pcap兼容性安裝包
0x04.第一個抓包實(shí)例
打開wireshark 3.0.4,主界面如下:

選擇菜單欄上捕獲——>選項(xiàng),,取消混雜模式,勾選WLAN,開始(你也可以直接雙擊上圖的WLAN開始)

此時wireshark已經(jīng)開始工作,查看抓包

打開cmd窗口,執(zhí)行ping http://xxx.cn
工作中的wireshark將抓取到相關(guān)數(shù)據(jù)包,在過濾欄設(shè)置過濾條件以避免其他無用數(shù)據(jù)包影響分析,比如:ip.addr == 185.199.111.153 and icmp表示只顯示ICPM協(xié)議且源主機(jī)IP或者目的主機(jī)IP為185.199.111.153的數(shù)據(jù)包。說明:協(xié)議名稱icmp要小寫

0x05.Wireshark抓包界面介紹

0x06.數(shù)據(jù)包詳細(xì)信息
各行信息分別為 Frame: 物理層的數(shù)據(jù)幀概況 Ethernet II: 數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息 Internet Protocol Version 4: 互聯(lián)網(wǎng)層IP包頭部信息 Transmission Control Protocol: 傳輸層T的數(shù)據(jù)段頭部信息,此處是TCP * Hypertext Transfer Protocol: 應(yīng)用層的信息,此處是HTTP協(xié)議

0x07.TCP包的具體內(nèi)容
從下圖可以看到wireshark捕獲到的TCP包中的每個字段。

0x08.wireshark過濾器表達(dá)式的規(guī)則
1、抓包過濾器語法和實(shí)例
抓包過濾器類型Type(host、net、port)、方向Dir(src、dst)、協(xié)議Proto(ether、ip、tcp、udp、http、icmp、ftp等)、邏輯運(yùn)算符(&& 與、|| 或、!非)
協(xié)議過濾
比較簡單,直接在抓包過濾框中直接輸入?yún)f(xié)議名即可。tcp,只顯示TCP協(xié)議的數(shù)據(jù)包列表 http,只查看HTTP協(xié)議的數(shù)據(jù)包列表 icmp,只顯示ICMP協(xié)議的數(shù)據(jù)包列表
IP過濾
host 192.168.1.104 src host 192.168.1.104 dst host 192.168.1.104
端口過濾
port 80 src port 80 dst port 80
邏輯運(yùn)算符&& 與、|| 或、!非
src host 192.168.1.104 && dst port 80 抓取主機(jī)地址為192.168.1.80、目的端口為80的數(shù)據(jù)包 host 192.168.1.104 || host 192.168.1.102 抓取主機(jī)為192.168.1.104或者192.168.1.102的數(shù)據(jù)包 !broadcast 不抓取廣播數(shù)據(jù)包
顯示過濾器語法和實(shí)例
比較操作符
比較操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于。
協(xié)議過濾
比較簡單,直接在Filter框中直接輸入?yún)f(xié)議名即可。注意:協(xié)議名稱需要輸入小寫。tcp,只顯示TCP協(xié)議的數(shù)據(jù)包列表 http,只查看HTTP協(xié)議的數(shù)據(jù)包列表 icmp,只顯示ICMP協(xié)議的數(shù)據(jù)包列表
ip過濾
ip.src ==192.168.1.104 顯示源地址為192.168.1.104的數(shù)據(jù)包列表 ip.dst==192.168.1.104, 顯示目標(biāo)地址為192.168.1.104的數(shù)據(jù)包列表?
ip.addr == 192.168.1.104 顯示源IP地址或目標(biāo)IP地址為192.168.1.104的數(shù)據(jù)包列表
端口過濾
tcp.port ==80, 顯示源主機(jī)或者目的主機(jī)端口為80的數(shù)據(jù)包列表。?
tcp.srcport == 80, 只顯示TCP協(xié)議的源主機(jī)端口為80的數(shù)據(jù)包列表。
tcp.dstport == 80,只顯示TCP協(xié)議的目的主機(jī)端口為80的數(shù)據(jù)包列表。
Http模式過濾
http.request.method=="GET", 只顯示HTTP GET方法的。
邏輯運(yùn)算符為 and/or/not
過濾多個條件組合時,使用and/or。比如獲取IP地址為192.168.1.104的ICMP數(shù)據(jù)包表達(dá)式為ip.addr == 192.168.1.104 and icmp
按照數(shù)據(jù)包內(nèi)容過濾。
假設(shè)我要以IMCP層中的內(nèi)容進(jìn)行過濾,可以單擊選中界面中的碼流,在下方進(jìn)行選中數(shù)據(jù)。右鍵-->準(zhǔn)備過濾器-->選中-->添加條件表達(dá)式,如data contains "uestc"
0x09.Wireshark分析TCP協(xié)議三次握手
TCP三次握手連接建立過程

第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)。{% endtabs %}
wireshark抓取訪問指定服務(wù)器數(shù)據(jù)包
啟動wireshark抓包,打開瀏覽器輸入www.cnblogs.com
終止抓包,輸入http過濾
隱藏其他無關(guān)http數(shù)據(jù)包,右鍵選中,追蹤流——>TCP流,顯示握手信息,如圖所示:

可以看到這里截獲了三個握手?jǐn)?shù)據(jù)包,第四個是HTTP數(shù)據(jù)包,說明HTTP的確是使用TCP建立連接的。
第一次,客戶端發(fā)送了一個TCP,標(biāo)志位為SYN,序列號為0,表示客戶端請求建立連接,如下:

關(guān)鍵參數(shù)
SYN :標(biāo)志位,表示請求建立連接
Seq = 0 :初始建立連接值為0,數(shù)據(jù)包的相對序列號從0開始,表示當(dāng)前還沒有發(fā)送數(shù)據(jù)
Ack = 0:初始建立連接值為0,已經(jīng)收到包的數(shù)量,表示當(dāng)前沒有接收到數(shù)據(jù)
第二次,服務(wù)器發(fā)回確認(rèn)包, 標(biāo)志位為 SYN,ACK. 將確認(rèn)序號(Acknowledgement Number)設(shè)置為客戶的ISN加1以.即0+1=1, 如下圖如下:

關(guān)鍵參數(shù)
SYN + ACK: 標(biāo)志位,同意建立連接,并回送SYN+ACK
Seq = 0 :初始建立值為0,表示當(dāng)前還沒有發(fā)送數(shù)據(jù)
Ack = 1:表示當(dāng)前端成功接收的數(shù)據(jù)位數(shù),雖然客戶端沒有發(fā)送任何有效數(shù)據(jù),確認(rèn)號還是被加1,因?yàn)榘琒YN或FIN標(biāo)志位。(并不會對有效數(shù)據(jù)的計(jì)數(shù)產(chǎn)生影響,因?yàn)楹蠸YN或FIN標(biāo)志位的包并不攜帶有效數(shù)據(jù))
第三次,客戶端再次發(fā)送確認(rèn)包(ACK) SYN標(biāo)志位為0,ACK標(biāo)志位為1.并且把服務(wù)器發(fā)來ACK的序號字段+1,放在確定字段中發(fā)送給對方.并且在數(shù)據(jù)段放寫ISN的+1,如下圖如下:

關(guān)鍵參數(shù)
ACK :標(biāo)志位,表示已經(jīng)收到記錄Seq = 1 :表示當(dāng)前已經(jīng)發(fā)送1個數(shù)據(jù)Ack = 1 : 表示當(dāng)前端成功接收的數(shù)據(jù)位數(shù),雖然服務(wù)端沒有發(fā)送任何有效數(shù)據(jù),確認(rèn)號還是被加1,因?yàn)榘琒YN或FIN標(biāo)志位(并不會對有效數(shù)據(jù)的計(jì)數(shù)產(chǎn)生影響,因?yàn)楹蠸YN或FIN標(biāo)志位的包并不攜帶有效數(shù)據(jù))。
0x0a.其他
調(diào)整時間戳
View -->Time Display Format --> Date and Time of Day
參考
https://www.cnblogs.com/linyfeng/p/9496126.html
https://www.zhoulujun.cn/html/theory/network/201611307908.html
1. JavaScript 重溫系列(22篇全) 2. ECMAScript 重溫系列(10篇全) 3. JavaScript設(shè)計(jì)模式 重溫系列(9篇全) 4.?正則 / 框架 / 算法等 重溫系列(16篇全) 5.?Webpack4 入門(上)||?Webpack4 入門(下) 6.?MobX 入門(上)?||??MobX 入門(下) 7.?70+篇原創(chuàng)系列匯總 回復(fù)“加群”與大佬們一起交流學(xué)習(xí)~
點(diǎn)擊“閱讀原文”查看70+篇原創(chuàng)文章

