wireshark分析網路
只有當你不把努力當做努力時,你才能沉迷於一件事,才能埋頭苦幹,這是才能的證明。
一、抓包過濾器的用法
二、使用Expert info排障
三、TCP的常見資訊
四、TCP三次握手
五、在linux中使用tcpdump
一、抓包過濾器的用法
1、Wireshark主要提供兩種的過濾器
a、捕獲過濾器:當進行資料包捕獲時,只有那些滿足給定的包含/排除表示式的資料包才會被捕獲。
b、顯示過濾器:根據指定的表示式用於在一個已經捕獲的資料包集合中,只顯示需要的資料包。
注意:捕獲過濾器和顯示過濾器的配置語法並不相同。
2、Wireshark捕獲過濾器之BPF語法
BPF語法是廣泛應用與多種資料包嗅探軟體,掌握BPF語法對你在資料包層級更深入地探索網路來說非常關鍵。
使用BPF語法建立的過濾器叫做表示式,每個表示式由一個或者多個原語組成,每個原語包含一個或多個限定詞,然後跟著一個ID名字或者數字。
Dst host 192.168.1.1 && tcp port 80
限定詞 ID 操作符 限定詞 ID
限定詞 |
說明 |
列子 |
Type |
指出名字或者數字所代表的意義 |
Host、net、port |
Dir |
指明目標還是源,名字或者數字 |
Src、dst |
Proto |
限定所要匹配的協議 |
Ip、tcp、udp、http、ftp |
3種邏輯運算子,對源語進行組合
- 連線運算子與(&&或and)
- 選擇運算子或(||或or)
- 否定運算子非(!或not)
如:src 192.168.1.1 && port 80 捕獲源地址為192.168.1.1 80埠的流量
Host 192.168.1.1
Host 2001:db1::6666
Host websever (主機名)
Ether host 0063-aaa1-bbb2
Src host 192.169.1.1
Dst host 192.168.1.1
Dst 192.168.1.1
Port 8080 (只捕獲源或者目標8080埠的流量)
! Port 8080 (捕獲除了8080以外的流量)
Dst port 80 (只捕獲目標埠是80的流量)
Udp portrange 2000-3000 (只捕獲源或目標埠是2000-3000的udp資料)
Tcp portrange 5000-6000
3、TCP頭部中幾種常用的標記位
SYN:用來表示開啟連線
FIN:用來表示拆除連線
ACK:用來確認收到的資料
RST:用來表示立刻拆除連線
PSH:用來表示應將資料提交給末端應用程式處理
4、Wireshark顯示過濾器
(1)常用顯示過濾器表示式
操作符 說明
!tcp.port==3389 排除RDP流量
!arp 排除ARP流量
http 所有HTTP流量
Tcp.port==23 || tcp.port 21 文字管理流量(telnet或ftp)
(2)顯示過濾器的邏輯操作符
操作符 說明
And 兩個條件需同時滿足
Or 其中一個條件被滿足
Xor 有且僅有一個條件被滿足
Not 沒有條件被滿足
二、使用Expert info排障
對話(藍色)
有關通常工作流程的資訊,例如帶有SYN標誌集的TCP資料包。
注意(cyan)
值得注意的事件,例如,應用程式返回了一個常見的錯誤程式碼,如HTTP 404。
警告(黃色)
警告,例如,應用程式返回了一個不尋常的錯誤程式碼,如連線問題。
錯誤(紅色)
嚴重的問題,如資料包格式錯誤。
- Errors:所抓資料識別出的嚴重錯誤
- Warnings:所抓資料識別出的一般性問題
- Notes:所抓資料識別出的可能會引發故障的異常現象
- Chats:此標籤下的資料包都符合常規流量特徵
Errors:所抓資料識別出的嚴重錯誤。比如,感知到畸形spoolss或gtp協議資料包,又或者識別到某些資料包的某種欄位值跟預期不符(比如,ipv4資料包的ip包頭中效驗和欄位值跟預期值不符合,即Ipv4資料包通不過效驗和檢查)。
對於一個網路而言,穿梭於其中的資料包只要有百分之一,二具有Errors事件特徵的資料包,就會導致事故頻發(比如TCP重傳),而且也會使網路變得很慢。
Warning:所抓資料識別出來的一般性問題。比如感知了存在TCP零視窗,TCP window full、TCP報文段失序、TCP報文段丟失等現象,又或者識別出了相關網路協議在運作時發出的資料包的內容與正常情況不一致。所謂一般性問題幾乎都是應用程式問題或通訊問題。
認識Warnings事件:
1、含Reassembly字樣的幾種子事件:大多是指wireshark抓到了未能重組的資料包。一般而言,這都是wireshark協議解析器問題。
2、在Summary一欄裡含window字樣的子事件:幾乎都是指wireshark感知到了網路中存在TCP zero windown或window full問題,一般而言都是建立tcp連線的端到端裝置忙不過來所致。
3、在Summary一欄裡含Segmeng字樣的子事件:wireshark生成tcp報文段丟失事件資訊,是因為末抓全隸屬於某股TCP資料流的所有TCP報文段;生成了TCP報文段失序事件資訊,是因其感知到了TCP報文未按時傳送主機發出的順序到達接受主機。
這三種子事件都屬於TCP故障,一般由網路故障所引發。
總結:wireshark能感知資料包中的種種特徵,比如視窗大小欄位,TCP報文在傳輸中是否失序,TCP資料收到之後是否做出確認。但是請注意,wireshark事件只是wireshark自認為比較重要的事件,卻不能全信,比如wireshark未能抓取所有的資料包,則必會生成warnings事件,但未必就是網路問題,可能只是抓包時間差問題導致。
Notes:所抓資料識別出的可能會引起故障的異常現象。比如,感知到了TCP重傳,重複確認,以及快速重傳等現象。雖然上述行為可能會對網路產生嚴重影響,但屬於TCP的正常行為,所有被歸納在Notes,以提醒使用者這些資料可能會導致問題的嫌疑。
認識Notes事件:
Wireshark感知到的子類Error事件,主要分為以下三種情況:
1、在Summary一欄裡含Retransmissions, Fast Retransmissions、Duplicate ACK字樣的子事件:通常預示著網速慢,丟包或者通過TCP傳輸資料的主機應用程式忙不過來。
2、在Summary一欄裡含Keep-Alive字樣的子事件:通常預示著TCP或者基於TCP的應用程式問題。
3、在Summary一欄裡含Time to live字樣的子事件:通常預示著路由問題。
總結:Notes事件的每一種子事件,並非是由固定的某一種型別的故障所導致,以TCP重傳現象為列,可能是因為丟包錯誤,網路狀態差(頻寬低,延時高)、伺服器或客戶端停止響應等。Wireshark只是提示存在TCP重傳現象,至於如何定位原因找到問題,需根據網路現狀及業務綜合判斷。
Chats:可以統計各種資料包的個數,尤其是TCP的SYN的個數,可以判斷是否正在受到SYN flood的攻擊。
注意事項
wireshark感知的warnings事件有時無關緊要,但是識別出的Notes事件卻偏偏會影響網路效能,所以排除故障時,需要關注內在,切勿只看表面。
三、TCP常見資訊
1、對話資訊(Chat)
視窗更新(window update):由接收著傳送,用來通知傳送者TCP接受視窗的大小已經發生更改。
2、注意資訊(Note)
TCP重傳(retransmission):資料包丟失的結果。發生收到重傳的ACK,或者資料包的重傳計時器超時的時候。
重複ACK(Duplicate ACK):當一臺主機沒有收到下一個期望序列號的資料包時,會生成最近一次收到的資料的重複ACK。
保活ACK(ACK to TCP Keep-alive):用來響應資料包
3、警告資訊(Warn)
上一段丟失:指明資料包丟失。發生在當資料流中一個期望序列號被跳過時。
亂序:當資料包被亂序接受時,會利用序列號檢測。
四、TCP三次握手
1、第一次握手的資料包
客戶端傳送一個TCP,標誌位為SYN,序列號為0,代表客戶端請求建立連線。
2、第二次握手的資料包
伺服器發回確認包,標誌位為SYN,ACK。將確認序號(Acknowledgement Number)設定為1,syn加1,即0+1=1.
3、第三次握手的資料包
客戶端再次傳送確認包(ACK)SYN標誌位為0,ACK標誌位為1並且把伺服器發來ACK的序號欄位+1,放在確定欄位中傳送給對方。
4、TCP頭部中幾種常用的標記位
SYN:用來表示開啟連線
FIN:用來表示拆除連線
ACK:用來確認(通過TCP連線)收到的資料
RST:用來表示立刻拆除連線
PSH:用來表示將資料提交給末端應用程式(程序)處理
六、在liun中使用tcpdump
1、理解關鍵字
型別的關鍵字:
a. host(預設型別):指明一臺主機,如host 10.154.0.10
b. net:指明一個網路地址,如net 10.154.0.0
c. port:指明埠號
確定方向的關鍵字
a.src:ip包源地址
b. dst:目標地址
c. src or dst 源地址或目標地址
d.dst && src 目標地址和源地址
協議的關鍵字:預設是監聽所有協議的資訊包
a.ip
b.tcp
c.udp
d.arp
....
邏輯運算
a. 非運算not, !
b.與運算and, &&
c.或運算or, ||
2、使用範例
(1)常用引數
-i:指定tcpdump要監聽的網絡卡
-c:指定要監聽的資料包數量
-w:指定監聽的資料包儲存在哪個檔案中
(2)範例
# tcpdump -i eth0 src host 10.154.0.7 //截獲10.154.0.7傳送的所有資料包
# tcpdump -i eth0 dst host 10.154.0.7 //截獲10.154.0.7接受的所有資料包
# tcpdump -i eth0 host 10.154.0.7 and tcp port 80 //截獲主機10.154.0.7所有在tcp 80的資料包
# tcpdump -i eth0 host 10.154.0.7 and dst port 80 -w /tmp/wzz.pcap //截獲主機10.154.0.7在80埠收到資料包並儲存在/tmp目錄下wzz.pcap檔案中。注:widonws下wireshake中可直接開啟。
3、理解抓取的報文
如:10:30:38.806911 IP 10.154.0.8.22 > 10.154.0.7.49454: Flags [P.], seq 26272:26324, ack 53, win 238, options [nop,nop,TS val 1794729390 ecr 4282429292], length 52
第一個欄位 10:30:38.806911是該資料報文被抓取的系統本地時間戳。
然後,IP 是網路層協議型別,這裡是 IPv4,如果是 IPv6 協議,該欄位值是 IP6。
10.154.0.8.22 是源 ip 地址和埠號,緊跟其後的是目的 ip 地址和其埠號,這裡是 192.168.64.1.41916。
在源 IP 和目的 IP 之後,可以看到是 TCP 報文標記段 Flags [P.]。該欄位通常取值如下:
值標誌型別描述
S SYN Connection Start
F FIN Connection Finish
P PUSH Data push
R RST Connection reset
. ACK Acknowledgment
該欄位也可以是這些值的組合,例如 [S.] 代表 SYN-ACK 資料包。
接下來是該資料包中資料的序列號。對於抓取的第一個資料包,該欄位值是一個絕對數字,後續包使用相對數值,以便更容易查詢跟蹤。例如此處 seq 26272:26324代表該資料包包含該資料流的第 26272 到 26324 位元組。
接下來是 ack 值:ack 53。該資料包是資料傳送方,ack 值為 53。在資料接收方,該欄位代表資料流上的下一個預期位元組資料。
接下來欄位是接收視窗大小win 238,它表示接收緩衝區中可用的位元組數,後跟 TCP 選項如 MSS(最大段大小)或者視窗比例值。最後, length 52代表資料包有效載荷位元組長度。這個長度和 seq 序列號中位元組數值長度是不一樣的。