Wireshark是網(wǎng)絡(luò)封包分析軟件利器,可以截取各種網(wǎng)絡(luò)數(shù)據(jù)包,并顯示數(shù)據(jù)包詳細(xì)信息。常用于開發(fā)測(cè)試運(yùn)維過程各種問題定位。win10pcap兼容性安裝包下載:http://www./download/
Wireshark 抓包示例首先介紹一個(gè)使用wireshark工具抓取ping命令數(shù)據(jù)包的操作示例,讓我們可以先感受一下抓包的具體過程。1、打開wireshark ,主界面如下(已經(jīng)有中文版,對(duì)照著看既可):2、選擇菜單欄上Capture -> Option,勾選網(wǎng)卡(這里需要根據(jù)各自電腦網(wǎng)卡使用情況選擇)。點(diǎn)擊Start啟動(dòng)抓包。3、wireshark啟動(dòng)抓包后,就處于抓包狀態(tài)中。4、執(zhí)行一個(gè)數(shù)據(jù)包操作,如ping www.baidu.com。5、操作完成后相關(guān)數(shù)據(jù)包就抓取到了。為避免其他數(shù)據(jù)包影響分析,可在過濾欄設(shè)置過濾條件,過濾結(jié)果如下圖。
Wireshark抓包界面介紹說明:數(shù)據(jù)包列表區(qū)中不同的協(xié)議使用了不同的顏色區(qū)分。協(xié)議顏色標(biāo)識(shí)定位在菜單欄View --> Coloring Rules。如下所示1.Display Filter(顯示過濾器), 用于設(shè)置過濾條件進(jìn)行數(shù)據(jù)包列表過濾。菜單路徑:Analyze --> Display Filters。2.Packet List Pane(數(shù)據(jù)包列表), 顯示捕獲到的數(shù)據(jù)包,每個(gè)數(shù)據(jù)包包含編號(hào),時(shí)間戳,源地址,目標(biāo)地址,協(xié)議,長度,以及數(shù)據(jù)包信息。不同協(xié)議的數(shù)據(jù)包使用了不同的顏色區(qū)分顯示。3.Packet Details Pane(數(shù)據(jù)包詳細(xì)信息), 在數(shù)據(jù)包列表中選擇指定數(shù)據(jù)包,在數(shù)據(jù)包詳細(xì)信息中會(huì)顯示數(shù)據(jù)包的所有詳細(xì)信息內(nèi)容。數(shù)據(jù)包詳細(xì)信息面板是最重要的,用來查看協(xié)議中的每一個(gè)字段。各行信息分別為(1)Frame: 物理層的數(shù)據(jù)幀概況(2)Ethernet II: 數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息(3)Internet Protocol Version 4: 互聯(lián)網(wǎng)層IP包頭部信息(4)Transmission Control Protocol: 傳輸層T的數(shù)據(jù)段頭部信息,此處是TCP(5)Hypertext Transfer Protocol: 應(yīng)用層的信息,此處是HTTP協(xié)議從下圖可以看到wireshark捕獲到的TCP包中的每個(gè)字段。4.Dissector Pane(數(shù)據(jù)包字節(jié)區(qū))。報(bào)文原始內(nèi)容。Wireshark過濾器設(shè)置初學(xué)者使用wireshark時(shí),將會(huì)得到大量的冗余數(shù)據(jù)包列表,以至于很難找到自己需要抓取的數(shù)據(jù)包部分。wireshark工具中自帶了兩種類型的過濾器,學(xué)會(huì)使用這兩種過濾器會(huì)幫助我們?cè)诖罅康臄?shù)據(jù)中迅速找到我們需要的信息。捕獲過濾器的菜單欄路徑為Capture --> Capture Filters。用于在抓取數(shù)據(jù)包前設(shè)置。可以在抓取數(shù)據(jù)包前設(shè)置如下。ip host 60.207.246.216 and icmp表示只捕獲主機(jī)IP為60.207.246.216的ICMP數(shù)據(jù)包。獲取結(jié)果如下:顯示過濾器是用于在抓取數(shù)據(jù)包后設(shè)置過濾條件進(jìn)行過濾數(shù)據(jù)包。通常是在抓取數(shù)據(jù)包時(shí)設(shè)置條件相對(duì)寬泛或者沒有設(shè)置導(dǎo)致抓取的數(shù)據(jù)包內(nèi)容較多時(shí)使用顯示過濾器設(shè)置條件過濾以方便分析。同樣上述場(chǎng)景,在捕獲時(shí)未設(shè)置抓包過濾規(guī)則直接通過網(wǎng)卡進(jìn)行抓取所有數(shù)據(jù)包,如下執(zhí)行ping www.huawei.com獲取的數(shù)據(jù)包列表如下觀察上述獲取的數(shù)據(jù)包列表,含有大量的無效數(shù)據(jù)。這時(shí)可以通過設(shè)置顯示器過濾條件進(jìn)行提取分析信息。ip.addr == 211.162.2.183 and icmp。并進(jìn)行過濾。上述介紹了抓包過濾器和顯示過濾器的基本使用方法。在組網(wǎng)不復(fù)雜或者流量不大情況下,使用顯示器過濾器進(jìn)行抓包后處理就可以滿足我們使用。
Wireshark過濾器表達(dá)式的規(guī)則
1、捕獲過濾器捕獲過濾器表達(dá)式?jīng)]有像顯示過濾器表達(dá)式那樣明顯的規(guī)律,但寫法不多所以也不難;而且除非全部捕獲要占用的磁盤空間實(shí)現(xiàn)太大,且你非常明確過濾掉的數(shù)據(jù)包是你不需要的,不然一般都不用捕獲過濾器表達(dá)式。 | | | Host(s)Value(主機(jī)及數(shù)值) | Logical Operations(邏輯運(yùn)算符) | | | tcp,udp,ether,ip,arp,icmp,decnet,lat,sca,moprc,mopdl等 | src, dst, src and dst, src or dst | net(10.0.0.0/8), host(10.1.1.1), port(80), portrange(200-10000) | and(&&), or(||), not(!), xor(^^)
| 如tcp dst 10.2.2.2 3128 | 捕獲過濾表達(dá)式可以由Protocol、Direction、Host(s)Value、Logical Operations 4個(gè)核心元素自由組合。 ②示例:
(host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8捕捉IP為10.4.1.12或者源IP位于網(wǎng)絡(luò)10.6.0.0/16,目的IP的TCP端口號(hào)在200至10000之間,并且目的IP位于網(wǎng)絡(luò) 10.0.0.0/8內(nèi)的所有封包。2、顯示過濾器①語法結(jié)構(gòu):顯示過濾器的語法包含5個(gè)核心元素:IP地址、端口、協(xié)議、比較運(yùn)算符和邏輯運(yùn)算符。 顯示過濾表達(dá)式可以由5個(gè)核心元素自由組合,比如: ip.addr == 192.168.32.121 and tcp 顯示IP地址為 192.168.32.121 的tcp數(shù)據(jù)包 tcp.port == 80 顯示端口為 80 的數(shù)據(jù)包 IP地址:ip.addr、ip.src、ip.dst
端口:tcp.port、tcp.srcport、tcp.dstport 協(xié)議:tcp、udp、http、eth、ip、telnet、ftp、icmp、snmp等等 比較運(yùn)算符:
邏輯運(yùn)算符:
②常見實(shí)例篩選目標(biāo)mac地址為04:f9:38:ad:13:26的數(shù)據(jù)包----eth.dst == 04:f9:38:ad:13:26篩選源mac地址為04:f9:38:ad:13:26的數(shù)據(jù)包----eth.src == 04:f9:38:ad:13:26篩選ip地址為192.168.1.1的數(shù)據(jù)包----ip.addr == 192.168.1.1篩選192.168.1.0網(wǎng)段的數(shù)據(jù)---- ip contains '192.168.1'篩選192.168.1.1和192.168.1.2之間的數(shù)據(jù)包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2篩選從192.168.1.1到192.168.1.2的數(shù)據(jù)包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2篩選tcp協(xié)議的數(shù)據(jù)包----tcp篩選除tcp協(xié)議以外的數(shù)據(jù)包----!tcp篩選端口為80的數(shù)據(jù)包----tcp.port == 80篩選12345端口和80端口之間的數(shù)據(jù)包----tcp.port == 12345 && tcp.port == 80篩選從12345端口到80端口的數(shù)據(jù)包----tcp.srcport == 12345 && tcp.dstport == 80特別說明----http中http.request表示請(qǐng)求頭中的第一行(如GET index.jsp HTTP/1.1),http.response表示響應(yīng)頭中的第一行(如HTTP/1.1 200 OK),其他頭部都用http.header_name形式。篩選url中包含.php的http數(shù)據(jù)包----http.request.uri contains '.php'篩選內(nèi)容包含username的http數(shù)據(jù)包----http contains 'username'顯示post請(qǐng)求方式的http封包---http.request.method== 'POST'顯示請(qǐng)求的域名為tracker.1ting.com的http封包---http.host == 'tracker.1ting.com'5)按照數(shù)據(jù)包內(nèi)容過濾。假設(shè)我要以IMCP層中的Data字段進(jìn)行過濾,可以單擊選中界面中的碼流,在下方選中Data,右鍵單擊選中后出現(xiàn)如下界面,如下后面條件表達(dá)式就需要自己填寫。如下我想過濾出data數(shù)據(jù)包中包含'abcd'內(nèi)容的數(shù)據(jù)流。包含的關(guān)鍵詞是**contains **后面跟上內(nèi)容。看到這, 基本上對(duì)wireshak有了初步了解。
Wireshark抓包分析TCP三次握手Step1:客戶端發(fā)送一個(gè)標(biāo)志位SYN=1,ACK=0,發(fā)送序列號(hào)Sequence Number=X的數(shù)據(jù)包給服務(wù)端,請(qǐng)求進(jìn)行連接,這是第一次握手;Step2:服務(wù)端收到請(qǐng)求并且允許連接的話,就會(huì)發(fā)送一個(gè)標(biāo)志位SYN=1,ACK=1,確認(rèn)序列號(hào)Acknowledgment Number=X+1,發(fā)送序列號(hào)Sequence Number=Y的數(shù)據(jù)包給客戶端,告訴它可以通訊了,并且讓客戶端發(fā)送一個(gè)確認(rèn)數(shù)據(jù)包,這是第二次握手;Step3:客戶端收到數(shù)據(jù)包后發(fā)送一個(gè)標(biāo)志位SYN=0,ACK=1,確認(rèn)序列號(hào)Acknowledgment Number=Y+1,發(fā)送序列號(hào)Sequence Number=X+1的數(shù)據(jù)包給客戶端,告訴它連接已被確認(rèn),這就是第三次握手。TCP連接建立,開始通訊。
發(fā)送序列號(hào)為當(dāng)前端成功發(fā)送的數(shù)據(jù)位數(shù),確認(rèn)序列號(hào)為當(dāng)前端成功接收的數(shù)據(jù)位數(shù)。 舉例說明:
(2)wireshark抓包獲取訪問指定服務(wù)端數(shù)據(jù)包Step1:?jiǎn)?dòng)wireshark抓包,打開瀏覽器輸入www.huawei.com。Step2:使用ping www.huawei.com獲取IP。Step3:輸入過濾條件獲取待分析數(shù)據(jù)包列表 ip.addr == 211.162.2.183圖中可以看到wireshark截獲到了三次握手的三個(gè)數(shù)據(jù)包。第四個(gè)包才是HTTP的, 這說明HTTP的確是使用TCP建立連接的。客戶端發(fā)送一個(gè)TCP,標(biāo)志位為SYN,序列號(hào)為0, 代表客戶端請(qǐng)求建立連接。如下圖。數(shù)據(jù)包的關(guān)鍵屬性如下:SYN :標(biāo)志位,表示請(qǐng)求建立連接Seq = 0 :初始建立連接值為0,數(shù)據(jù)包的相對(duì)序列號(hào)從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)序號(hào)(Acknowledgement Number)設(shè)置為客戶的I S N加1即0+1=1, 如下圖數(shù)據(jù)包的關(guān)鍵屬性如下:Seq = 0 :初始建立值為0,表示當(dāng)前還沒有發(fā)送數(shù)據(jù)Ack = 1:表示當(dāng)前端成功接收的數(shù)據(jù)位數(shù),雖然客戶端沒有發(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ù))客戶端再次發(fā)送確認(rèn)包(ACK) SYN標(biāo)志位為0,ACK標(biāo)志位為1.并且把服務(wù)器發(fā)來ACK的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方.并且在數(shù)據(jù)段放寫ISN的+1, 如下圖:數(shù)據(jù)包的關(guān)鍵屬性如下:ACK :標(biāo)志位,表示已經(jīng)收到記錄Seq = 1 :表示當(dāng)前已經(jīng)發(fā)送1個(gè)數(shù)據(jù)Ack = 1 : 表示當(dāng)前端成功接收的數(shù)據(jù)位數(shù),雖然服務(wù)端沒有發(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ù))。就這樣通過了TCP三次握手,建立了連接。開始進(jìn)行數(shù)據(jù)交互下面針對(duì)數(shù)據(jù)交互過程的數(shù)據(jù)包進(jìn)行一些說明:數(shù)據(jù)包的關(guān)鍵屬性說明Ack: 1: 說明現(xiàn)在共收到1字節(jié)數(shù)據(jù)Seq: 1 Ack: 951: 說明現(xiàn)在服務(wù)端共收到951字節(jié)數(shù)據(jù)在TCP層,有個(gè)FLAGS字段,這個(gè)字段有以下幾個(gè)標(biāo)識(shí):SYN, FIN, ACK, PSH, RST, URG。如下其中,對(duì)于我們?nèi)粘5姆治鲇杏玫木褪乔懊娴奈鍌€(gè)字段。 它們的含義是: FIN表示關(guān)閉連接, SYN表示建立連接, RST表示連接重置, PSH表示有DATA數(shù)據(jù)傳輸, ACK表示響應(yīng)。本文參考文檔:https://blog.csdn.net/zzwwhhpp/article/details/113077747
|