wireshark工具使用詳解以及Tcp三次握手抓包解析

概述
今天學習了下抓包工做的使用,寫個文檔記錄下筆記總結。javascript

Wireshark介紹
wireshark是很是流行的網絡封包分析軟件,能夠截取各類網絡封包,顯示網絡封包的詳細信息。html

wireshark用處:java

        wireshark是捕獲機器上的某一塊網卡的網絡包,當你的機器上有多塊網卡的時候,你須要選擇一個網卡。瀏覽器

爲了安全考慮,wireshark只能查看封包,而不能修改封包的內容,或者發送封包。安全

Wireshark窗口介紹
 服務器

 

Wireshark主要分爲這幾個界面網絡

1 Display Filter(顯示過濾器), 用於過濾tcp

2 Packet List Pane(封包列表),顯示捕獲到的封包,有源地址和目標地址、端口號。post

3 Packet Details Pane(封包詳細信息),顯示封包中的字段學習

4 Dissector Pane(16進制數據)

5 Miscellanous(地址欄等其餘)

 

wireshark兩種過濾器
過濾器有:捕捉過濾器和顯示過濾器

經常使用的過濾表達式
1協議過濾:

HTTP、TCP、UDP、rtsp、rtp等等

2 IP過濾

ip.src == 192.168.1. 100顯示源地址爲192.168.1.100

ip.dst == 192.168.1.200 顯示目標地址爲192.168.1.200

3 端口過濾

tcp.port == 80 端口爲80的

tcp.srcport== 80 只顯示tcp協議的源端口爲80的

udp.port eq 15000 udp端口爲15000

tcp.port >= 1 and tcp.port <= 80 過濾端口範圍

4 HTTP模式過濾

http.request.method == 「Get」 只顯示端口範圍

5邏輯運算符爲 AND / OR ,&& / ||

 

捕捉過濾器(CaptureFilters)
   1.用於決定將什麼樣的信息記錄在捕捉結果中

   2.捕捉過濾器在抓抱前進行設置,決定抓取怎樣的數據

   3.捕捉過濾器僅支持協議過濾

 

捕捉過濾器: 捕捉前依據協議的相關信息進行過濾設置

捕捉過濾器語法

Protocol(協議):

 

可能值: ip、arp、rarp、tcp、udp、smtp、http、ftp、dns、icmp、…

Direction(方向):

可能值: stc、dst、src and dst、src or dst

若是沒有指明方向,則默認使用「src or dst」做爲關鍵字

「host 10.2.2.2」與「src or dst host 10.2.2.2」等價

Host(s):

可能值: net、port、host、portrange

Logical Operations(邏輯運算):

可能只: not、and、 or

顯示過濾器(DisplayFilters)
   1.用於在捕捉結果中進行詳細查找

   2.用於過濾抓包數據,方便stream的追蹤和排查

   3.顯示過濾器既支持協議過濾也支持內容過濾

 

 

顯示過濾器:對捕捉到的數據包依據協議或包的內容進行過濾

協議過濾語法
 

 

例如:http.request.method == "POST" string1和string2是可選的。

依據協議過濾時,可直接經過協議來進行過濾,也能依據協議的屬性值進行過濾。

按協議進行過濾:

snmp || dns || icmp 顯示SNMP或DNS或ICMP封包。

按協議的屬性值進行過濾:

ip.addr == 10.1.1.1 ip.src != 10.1.2.3 or ip.dst != 10.4.5.6

ip.src == 10.230.0.0/16 顯示來自10.230網段的封包。

tcp.port == 25 顯示來源或目的TCP端口號爲25的封包。

tcp.dstport == 25 顯示目的TCP端口號爲25的封包。

http.request.method== "POST" 顯示post請求方式的http封包。

http.host == "tracker.1ting.com" 顯示請求的域名爲tracker.1ting.com的http封包。

tcp.flags.syn == 0X02 顯示包含TCP SYN標誌的封包。

 

內容過濾語法
深度字符串匹配

tcp contains "http"

顯示payload中包含"http"字符串的tcp封包。

http.request.uri contains "online"

顯示請求的uri包含"online"的http封包。

特定偏移處值的過濾

tcp[20:3] == 47:45:54

 /* 16進制形式,tcp頭部通常是20字節,

因此這個是對payload的前三個字節進行過濾 */

http.host[0:4] == "trac"

 

包長度過濾
udp.length == 26 

這個長度是指udp自己固定長度8加上udp下面那塊數據包之和

tcp.len >= 7   

指的是ip數據包(tcp下面那塊數據),不包括tcp自己

ip.len == 94 

除了以太網頭固定長度14,其它都算是ip.len,即從ip自己到最後

frame.len == 119 

整個數據包長度,從eth開始到最後

過濾實例
mac過濾 IP過濾
Mac 過濾

eth.dst == A0:00:00:04:C5:84
eth.src eq A0:00:00:04:C5:84
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
IP過濾

ip.addr == 10.43.54.65
// 經常使用的研究二者間的通訊
ip.addr== 192.168.8.54 || ip.addr== 112.80.248.74
ip.src == 10.43.54.65 or ip.dst == 10.43.54.65

tcp和udp過濾
tcp.port == 80
tcp.port eq 80 or udp.port eq 80
tcp.port eq 25 or icmp
tcp.port >= 1 and tcp.port <= 80
tcp.window_size == 0 && tcp.flags.reset != 1
udp.length == 26
tcp類型和內容:
tcp[13] & 0×00 = 0: No flags set (null scan)
tcp[13] & 0×01 = 1: FIN set and ACK not set
tcp[13] & 0×03 = 3: SYN set and FIN set
tcp[13] & 0×05 = 5: RST set and FIN set
tcp[13] & 0×06 = 6: SYN set and RST set
tcp[13] & 0×08 = 8: PSH set and ACK not set

 

http過濾示例
http.request.method == 「GET」

http.request.method == 「POST」

http.request.uri == 「/img/logo-edu.gif」

http.host == party.syyx.com
http.response.code == 404
http.content_type contains "javascript"

http contains 「GET」


http.request.method == "GET" && http contains "Host: "
http.request.method == "GET" && http contains "User-Agent: "
http.request.method == "POST" && http contains "Host: "
http.request.method == "POST" && http contains "User-Agent: "
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "

 

如下內容摘抄自: http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

封包列表(Packet List Pane)
封包列表的面板中顯示: 編號、時間戳、源地址、目標地址、協議、長度、以及封包信息,不一樣的協議用了不一樣的顏色顯示,也能夠本身修改這些顯示的顏色規則, view->coloring Rules。封標列表以下圖所示

 

 

封包詳細信息(Packet Details pane)
這個面板是咱們最重要的。 用來查看協議中的每個字段,各行信息以下

Frame: 物理層的數據幀歸納

Ethernet ll : 數據鏈路層以太網幀頭部信息

Internet Protocol Version 4 : 互聯網層IP包頭部信息

Transmission Control protocol: 傳輸層T的數據頭部信息,此處是TCP

Hypertext Transfer Protocol: 應用層的信息,此處是HTTP協議

 

Wireshark與對應的OSI七層模型


TCP包具體內容
從下圖能夠看到wireshark捕獲到的TCP包中的每一個字段。

  

實例分析TCP三次握手過程
 
TCP報文格式 

下面是TCP報文格式圖


上圖中有幾個字段須要重點介紹下:

一、序號:Seq序號,佔32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。
二、確認序號:Ack序號,佔32位,只有ACK標誌位爲1時,確認序號字段纔有效(Ack=Seq+1)。
三、標誌位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義以下:
(A)URG:緊急指針(urgent pointer)有效。
(B)ACK:確認序號有效。
(C)PSH:接收方應該儘快將這個報文交給應用層。
(D)RST:重置鏈接。
(E)SYN:發起一個新鏈接。
(F)FIN:釋放一個鏈接。
須要注意的是:
(A)不要將確認序號Ack與標誌位中的ACK搞混了。
(B)確認方的Ack=發起方的Seq+1,兩端配對。

三次握手過程爲
 

這圖我都看過不少遍了, 此次咱們用wireshark實際分析下三次握手的過程。

打開wireshark, 打開瀏覽器輸入 http://www.cnblogs.com/tankxiao

在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,以下圖:

相關文章
相關標籤/搜索