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

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

此時(shí)wireshark已經(jīng)開(kāi)始工作,查看抓包

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

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包中的每個(gè)字段。

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

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

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

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

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

關(guān)鍵參數(shù)
ACK :標(biāo)志位,表示已經(jīng)收到記錄 Seq = 1 :表示當(dāng)前已經(jīng)發(fā)送1個(gè)數(shù)據(jù) Ack = 1 : 表示當(dāng)前端成功接收的數(shù)據(jù)位數(shù),雖然服務(wù)端沒(méi)有發(fā)送任何有效數(shù)據(jù),確認(rèn)號(hào)還是被加1,因?yàn)榘琒YN或FIN標(biāo)志位(并不會(huì)對(duì)有效數(shù)據(jù)的計(jì)數(shù)產(chǎn)生影響,因?yàn)楹蠸YN或FIN標(biāo)志位的包并不攜帶有效數(shù)據(jù))。
0x0a.其他
調(diào)整時(shí)間戳
View-->TimeDisplayFormat-->DateandTime of Day
參考
https://www.cnblogs.com/linyfeng/p/9496126.html
https://www.zhoulujun.cn/html/theory/network/201611307908.html
分享前端好文,點(diǎn)亮?在看?
