wireshark入門 & Wireshark網絡問題案例分析


wireshark入門

抓包過濾器
BPF語法(Berkeley Packet Filter),基於libpcap/wincap庫
語句間語法:<Expressions><Logical operations><Expressions>
<Expressions>語句內部語法:<Protocol name><Direction><Host(s)><Value>

1.protocol可選值:ether,fddi,ip,arp,rarp,decnet,lat,tcp,dns等等協議
2.direction可選值:src,dst,src and dst,src or dst,默認為src or dst
3.host(s)可選值:net,port,host,portrange。默認為host,如 src 192.168.0.100 等價於src host 192.168.0.100
4.logical可選值:and,or,not(其中not魚油最高優先級,and和or優先級相同),運算順序:從左至右

示例:
1.tcp src port 443
2.not arp
3.port 80
4.src 192.168.0.100 and port 233
抓包過濾器
顯示過濾器
顯示過濾器的規則和抓包過濾器的規則略有不同!

語句間語法:<Expressions><Logical operations><Expressions>
<Expressions>語句內部語法:<Protocol>.<string1>.<string2><comparison operator><value>

比較操作符:==   !=   >   <   >=   <=
邏輯操作符:and/or/xor(有且僅有一個條件被滿足)/not
IP地址:ip.addr/ip.src/ip.dst
端口過濾:tcp.port/tcp.srcport/tcp.dstport/tcp.flag.syn/tcp.flag.ack
協議:arp/ip/icmp/udp/tcp/bootp/dns


示例:
1.tcp.port==80
2.!arp
3.ip.addr==192.168.1.111
4.(ip.dst==192.168.1.111)&& !(ip.dst==192.168.1.200)


提示:
1.在展示過濾器手動輸入過濾規則時,會自動彈出一些過濾條件
2.右鍵菜單-設置過濾規則時,可以右擊的對象包括源IP,目的IP,協議,也可以在數據包解析區右擊數據。
3.在展示過濾器判斷的Expression按鍵,可以使用像選擇題一樣,配置出過濾規則
顯示過濾器
wireshark顯示界面設置:
數據包列表展示區
字體大小調節---------------3個放大鏡按鈕

列設置----------------進入有2個方法,1.edit-prefernces-columns。2.右擊列-columns-prefernces
    所有的可以設置為過濾規則的,也可以設置為列名
增加列----------------2個方法:1.在數據包解析區找到你要增加的列的信息,右擊-apply as columns。
    2.edit-prefernces-columns,在列編輯頁面編輯
修改列:右擊列名-edit columns detail,即進入修改。或者可以進入列編輯頁面進行修改
隱藏列:右擊列名-hide columns。或者可以進入列編輯頁面進行修改
刪除列:右擊列名-remove columns。或者可以進入列編輯頁面進行修改


時間設置:
view - time display format :修改時間顯示格式
右擊數據包 - set time reference(toggle) :設置相對的參考時間

名字解析:
edit - preferences - name resolution。或者在抓包設置中也可以設置



在協議分層統計時,arp包一般占比在百分之零點幾,若占比到10+,則有可能有人在搞arp攻擊

長度40-79的數據包一般是arp包、tcp建立連接時的包,dns包等等。可以對數據包展示區對length進行排序查看
長度1280-2559的數據包一般是tcp數據包


在數據分析時,wireshark支持右擊,對數據包進行注釋

protocol是自動識別的,但是也可以強制指定。比如NDS協議數據包,默認當然是用DNS來解析的了,強制使用其他協議時,那么所有的DNS協議包全部使用其他協議進行解析。

TLSv1.2即https
https=http+ssl(ssl,后來改名為tls)

詳細的可見微軟note筆記

參考:常濤wireshark+陳鑫傑wireshark

Wireshark進階之網絡問題案例分析

Wireshark的信息統計(Statistics)

每次查看大量數據包流量時,建議從Wireshark的信息統計部分開始進行總的查看,往往能夠了解到大體的一些信息,對后續具體的流量分析作用很大。

查看端點(Endpoints),往往可以觀察到該數據包中哪些地址的流量較多等信息,可以判斷出哪些地址比較可疑等信息
查看會話(Conversations),會話跟端點的區別在於會區別顯示哪兩個IP在通信,且各自都發送多大的數據等
協議分層(Protocol Hierarchy Statistics),從該窗口中可看出是哪些協議的流量比較多
每次進行流量檢查的時候最好先打開這個窗口,方便進行總的流量查看,若不常用的協議流量較多時則可能存在一些異常行為。


數據包長度(Packet Lengths),可以查看數據包的大小所占百分比,如果存在着很多的較大的數據包,則很可能是在傳輸數據
查看IO圖(IO Graphs),顯示下載量和下載速度,如下分別為下載慢的和快的

雙向時間圖(TCP Stream Graph>Round Trip Time Graph),確定是否存在延遲,延遲點的查看即查看峰值較高的點(這個圖沒找到在哪)

專家信息(Analyze>Expert Info Composite),在Analysis中
四類狀態:對話chat(關於通信的基本信息)、注意note(正常通信中的異常數據包)、警告warn(不是正常通信中的異常數據包)、錯誤error(數據包中的錯誤,或者解析器解析時錯誤)。



一些常見的協議包
IPv4頭存活時間TTL:TTL值規定了數據包在丟棄之前所能經歷的時間或者能夠經過的最大的路由數目。
TCP三次握手  SYN----SYN,ACK---ACK
TCP終止FIN   FIN,ACK---ACK;FIN,ACK---ACK(一端發起終止TCP,另一端收到FIN包后,先回復一個ACK包,再發起一個終止包(FIN,ACK))
TCP重置RST   SYN---RST,ACK
ICMP ping    Echo(ping)request---Echo(ping)reply(Type為8、Code為0意味着這是一個echo請求,Type為0、Code為0意味着這是一個echo響應)
DNS查詢(資源記錄類型A-IPv4主機地址,NS-權威域名服務器,CNAME-規范別名,MX-郵件交換,TXT-文本字符串,AAAA-IPv6主機地址,IXFR-增量區域傳送,AXFR-完整區域傳送)

為什么建立連接是三次握手,而關閉連接卻是四次揮手呢?
這是因為服務端在LISTEN狀態下,收到建立連接請求的SYN報文后,把ACK和SYN放在一個報文里發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方后,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

在三次握手的服務器端的回復包中,ack為seq的值+1
wireshark圖表及常見協議說明
1、Wireshark嗅探分別ncat和nc流量來進行無加密和加密傳輸的對比
nc是明文的,而ncat是加密的。


2.TCP的錯誤恢復和流量控制機制以及識別、診斷網絡慢的問題
1)TCP重傳
重傳數據包是TCP最基本的錯誤恢復特性之一。當數據包發送出去但是接收方並沒有發送ACK時,發送方會認為原來的數據包已經丟失然后再重傳,期間RTO(重傳超時)的值會翻倍。整個過程會持續收到接收方發送的ACK或者是發送方重傳次數達到最大值為止。
TCP重傳包---TCP Retransmission

2)TCP重復確認和快速重傳
當接收方收到亂序的數據包時,便發送重復的ACK,且TCP在其頭部使用序號和確認號字段來確保數據被可靠接受並以發送順序重組。
(關鍵)接收數據的序號+接收數據的字節數=發出的確認號;即回復包的ack值=接收包中的seq值+接收包中的數據長度len值;ack = seq+len

當接收方接收到與計算不一樣的序號的時候會假設有數據包丟失了,從而會向發送方發送一個包含丟失的數據包序號的ACK數據包讓發送方重傳數據包。而當發送方收到3個來自接收方的重復ACK時會立刻發送一個快速重傳。重傳其間其他所有的正在傳輸的都停止下來等重傳數據包完成傳輸才能繼續傳輸。



即本端的回復ack中,ack的值=服務器端發來的數據包的seq值+該數據包中的數據長度len
服務器端發送的數據包中的seq值(非該TCP會話的第一個數據包)=本端回復的ack值
本場景為到服務器端下載文件,當TCP三次握手建立成功后:
第一個數據包為:本端先發送了一個PSH,ACK包,該數據包中含有少量數據(其實就是http get請求),即seq=1(wireshark設置的相對序列號),len有值(大小100+);所以服務器端回復的ACK包中ack值=接收包中的seq+len
然后服務器端開始不斷地傳回數據,此時可以看到本端只回復ACK確認包,而不會再發送數據。
所以可以發現,本端的所有ACK確認包中,seq值不變,ack值=接收包中的seq+len
而服務器端的所有發來的數據包(wireshark上顯示也是為ACK包)中,ack值不會,seq值=上一個本端回復的ack包的ack值。

更簡練的總結:最初是的seq為1,ack值=該次tcp會話中接收到的所有數據的len值+1
所以就很簡單了:服務器端只有在接收本端的一個PSH,ACK包中有數據,所以服務器端接下來所有的包ack值都不變。seq值等於回復的ack值,而數據發送要連續,所以seq在不斷變化
本端接下來只接收數據,而不發送數據,所以seq值不變,而ack值不斷變化
服務器端:ack值不變,seq值不斷變化()
本端:seq值不變,而ack值不斷變化()


3)TCP滑動窗口機制
TCP滑動窗口機制用於檢測何時發生了數據包丟失並調整數據傳輸速率加以避免。

窗口大小:服務器會計算客戶端在此前發送數據包的速率並計算按如此速率下去接受是否會發生數據包丟失,若可能會發生丟失時,服務器會根據能夠接受的速率進行調整返回的ACK數據包的TCP頭部窗口大小值來實現數據的正常接受。另外,窗口大小值遞減,是主機延遲增加的一個典型指標。

零窗口:有時候服務器會沒辦法處理客戶端發送過來的數據,這是服務器會發送一個數據包指明窗口大小是零,讓客戶端停止所有的數據傳輸。但客戶端依然會通過發送“保活數據包”來保持和服務器的連接以便確認服務器接受窗口的狀態。




4)網絡高延遲
正常通信
整個通信過程是相當迅速的,即每個數據包發送的時間不會隔很久:即數據包間隔在0.1秒以內(基本在0.01-0.05之間)

線路延遲
在示例中看到在三次握手時,SYN和SYN,ACK包的間隔較長(1秒左右);因為這種三次握手的數據包都是無數據的,即使設備再忙,也可以快速響應,排除了設備的可能,所以可能為線路延遲。(原話:因為當服務器收到一個SYN數據包時,它不涉及任何傳輸層以上的處理,是只需要很小的處理量就能夠進行發送一個響應的,即使是在承受巨大的流量負載的時候也一樣能迅速響應,從而排除了服務器的可能性。)

HTTP的GET請求從客戶端正常發送給服務器之后的,而同樣,服務器在發送數據之前先發送一個ACK是不會耗費很多處理資源的,因而這也是線路延遲的一個標志。
(可以參考我個人總結的ack = seq+len)

通過上面的2個示例得出結論:無數據的ack包不涉及任何傳輸層以上的處理,是只需要很小的處理量就能夠進行發送一個響應,即使是在承受巨大的流量負載的時候也一樣能迅速響應,所以當這種ack包明顯延遲時,可以得出是線路延遲的結論。
線路延遲說明了問題並不是出在客戶端或者服務器中,而是線路中的某些設備中,可能是防火牆、代理服務器之類的問題等等。

客戶端延遲
如果在tcp三次握手建立后,看到http get請求包有明顯延遲,則可以判斷是客戶端問題。(此時在客戶端抓的包)

服務器延遲
當前面的都沒問題,http get請求包也順利發送到了服務器,這時服務器該開始回傳數據了,此時若看到服務器的數據包明顯延遲過高,則說明是服務器的問題。

小總結(抓包環境為客戶端):
因為ack包無數據,若延遲過高,則判斷為線路問題。
http get請求包延遲高,則判斷為客戶端問題。
http get相應包延遲高,則判斷為服務器端問題。


3.抓包分析NMAP工具進行SYN掃描
TCP SYN掃描是依賴於三次握手來確定目標主機上哪些端口是開放的。攻擊者會發送TCP SYN數據包到目標主機的一個范圍的端口上,假裝是要進行建立正常的通信連接,這也是TCP三次握手的第一次。若目標機器回復了TCP SYN/ACK數據包,則表明該端口是打開的,且這時候攻擊者是不進行任何回復的,這樣導致目標主機會進行3次重傳SYN/ACK;若攻擊者收到相應的RST數據包,表明端口已經關閉了;若攻擊者沒有收到任何響應,則意味着端口被某個中間設備過濾了,可能是防火牆或者主機本身。

可以通過“統計”>“會話”中的數據來快速識別哪些端口是開放的或者是關閉的:
其中點擊Conversations窗口內的TCP:1994,讓packets按從大到小的順序排序,其中5個包(SYN、SYN/ACK、三次重傳SYN/ACK)的端口就是開放的,2個包(SYN、RST)的端口就是關閉的,剩下的都是一個包(SYN)的都是不確定的。



4.被動式操作系統指紋術
“操作系統指紋術”是指在無物理接觸的情況下,來確定目標主機運行的操作系統的一組技術,分為主動式和被動式。

主動式主要為使用Nmap發起主動的掃描,然后再與指紋數據庫進行對比后確認。而被動式則主要是根據不同操作系統實現的TCP/IP協議棧都必須為這些域定義它自己的默認值來實現識別的原理。
實戰案例(含tcp三次握手及網絡故障解析)

參考:

Wireshark進階之網絡問題案例分析
https://blog.csdn.net/SKI_12/article/details/78333085

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM