wiresherk抓包之旅


wireshark的原名是Ethereal,新名字是2006年起用的。當時Ethereal的主要開發者Gerald決定離開他原來供職的公司NIS,並繼續開發這個軟件。但由於Ethereal這個名稱的使用權已經被原來那個公司註冊,Wireshark這個新名字也就應運而生了。 

Wireshark是世界上最流行的網絡分析工具。這個強大的工具可以捕捉網絡中的數據,併爲用戶提供關於網絡和上層協議的各種信息,也是網絡工程師、信息安全工程師必備的一個工具之一。

Wireshark下載:https://www.wireshark.org/download.html

Wireshark安裝就是傻瓜式的下一步下一步。


一:wireshark主要應用

網絡管理員用來解決網絡問題

網絡安全工程師用來檢測安全隱患

開發人員用來測試執行情況

學習網絡協議



二:界面介紹  

wireshark主界面可以分爲如下七個部分:1:主菜單欄、2:快捷方式、3:過濾欄、4:數據包列表區、5:數據包詳細信息區、6:比特區、7:數據包統計區域 wKioL1eu9yCj8FuDAAGMGrgcZSs736.png-wh_50



1..菜單欄選項介紹

(1)、flie(文件)欄用於打開,合併文件,保存,另存,導出爲特殊文件等等操作

(2)、Edit(編輯)菜單欄,查詢數據包,數據包標誌、時間設置等操作

(3)、view(試圖)菜單欄調整主界面信息

(4)、Capture(捕獲)菜單欄,選擇網卡,開始,停止抓包,過濾器等操作

(5)、Analyze(分析)菜單欄,顯示過濾器,tcp、udp包追蹤等功能

(6)、Statistics(統計)欄,數據彙總信息,會話選項,節點統計,IO圖,流量圖等,做出很多會話報表

(7)、Telephony(電話)支持語音流量功能

(8)、Tools(工具)

(9)、help幫助界面


2.快捷方式菜單

wKiom1ewIRGCQWGtAAA3AhSkJ2c942.png-wh_50

使用工具中的常用按鈕,分別有:查看網卡,列出接口選項,啓動,停止,重置,打開,着色…等


3.過濾欄

wKioL1ewIZrgewO-AAAN_rWjg-w909.png-wh_50

輸入語法過濾出想要的數據包,如過濾基於udp協議的數據包,在filter欄輸入udp,回車,列出基於udp的所有數據包


4.數據包列表區

數據包列表區列出了包的時間流、源IP、目的IP、協議、信息


5.數據詳細信息區

在列表區選中數據包的時候,數據包的詳細信息顯示在下方,我們稱爲詳細信息區


6..比特區

數據包字節,十六進制信息,通過比特區看到更詳細的字段信息


介紹完基本的界面,開始讓wireshark開始工作吧,打開wireshark,選擇網卡,start,開啓抓包之旅。

讓人頭痛的是,這麼多包,怎麼看,從哪看,在上大學時,我們老師向我們介紹wireshark的時候,我同樣的頭疼,每次抓包都不知道怎樣去尋找自己想要的包。後來經過看wireshark和書和視頻,學習他們的使用技巧。



三:wireshark抓包技巧

在拿到一個包,我們總是希望它儘量的小,所以抓包時應該儘量只抓必要的部分。

1.只抓包頭

 Capture-->Options  雙擊網卡信息,在Limit each packet to 處輸入數值,我在此輸入了80 字節,也就是說每個包只抓前 80 字節。如果問題涉及應用層,就應該再加上應用層協議頭的長度。如果你像我一樣經常忘記不同協議頭的長度,可以輸入一個大點的值。

wKioL1eu-3jCHGFaAAEGR9v1ivc763.png-wh_50




2.抓包過濾器

 Capture-->Options下的Capture Files,抓包過濾器,這是wireshark重要的功能,這裏可以設置抓取特定流量過濾條件,如果你確定過濾條件的語法,直接在Capture Filter區域輸入。在輸入錯誤時,Wireshark通過紅色背景區域表明無法處理過濾條件。

wKioL1eu-3iiBqlUAADouOP0xHM802.png-wh_50


點擊Capture Filter 按鈕查看並選擇,wireshark其中自身帶一些過濾規則實例

wKiom1eu-3my5Q4JAABXk1rwKfM109.png-wh_50



過濾器規語法:

Protocol + Direction +Host(s) +[Value] +[LogicalOperations] +[Other expression_r]

  Protocol(協議): 可能的值ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcpandudp. 如果沒有特別指明是什麼協議,則默認使用所有支持的協議。 

  Direction(方向): 可能的值:src,dst,srcanddst,srcordst。如果沒有特別指明來源或目的地,則默認使用"srcordst"作爲關鍵字。

  Host(s):可能的值:net,port,host,portrange。如果沒有指定此值,則默認使用"host"關鍵字。

  LogicalOperations(邏輯運算): 可能的值:not,and,or。否("not")具有最高的優先級。或("or")和與("and")具有相同的優先級,運算時從坐至右

  [Other expression_r]:與邏輯運算連用,其他的過濾語句。




語法實例:

(1)、抓取基於MAC的數據流

ether host 6C-58-67-9B-C7-01:抓取發送到/來自6C-58-67-9B-C7-01的數據流

ether src 6C-58-67-9B-C7-01:抓取來自6C-58-67-9B-C7-01的數據流

ether dst 6C-58-67-9B-C7-01:抓取發到6C-58-67-9B-C7-01的數據流

not ether host 6C-58-67-9B-C7-01:抓取除了發到/來自6C-58-67-9B-C7-01以外的所有數據流

ether broadcast或ether dst ff:ff:ff:ff:ff:ff:抓取廣播報文

ether multicast:抓取多播報文

抓取指定以太網類型的報文:ether proto 0800

抓取指定VLAN:vlan (vlan number)

抓取指定幾個VLAN:vlan (vlan number)and vlan (vlan number)


(2)、抓取基於IP的數據流

如果你的抓包環境下有很多主機正在通訊,可以考慮使用所觀察主機的IP地址來進行過濾。以下爲IP地址抓包過濾示例: 

host 192.168.11.183:抓取發到/來自192.168.11.183的數據流

host 2406:da00:ff00::6b16:f02d:抓取發到/來自IPv6地址2406:da00:ff00::6b16:f02d的數據流

not host 192.168.11.183:抓取除了發到/來自192.168.11.183以外的所有數據流

src host 192.168.11.183:抓取來自192.168.11.183的數據流

dst host 192.168.11.183:抓取發到192.168.11.183的數據流

host 192.168.11.183 or 192.168.11.254:抓取發到/來自192.168.11.183以及與通訊的數據流,抓取發到/來自192.168.11.254以及與通訊的所有數據流


(3)、抓取基於端口的數據流

你可能需要查看基於一個或幾個應用的數據流。抓包過濾器語法無法識別應用名,因此需要根據端口號來定義應用。通過目標應用的TCP或UDP端口號,將不相關的報文過濾掉。

port 53:抓取發到/來自端口53的UDP/TCP數據流(典型是DNS數據流)

not port 53:抓取除了發到/來自端口53以外的UDP/TCP數據流

port 80:抓取發到/來自端口80的UDP/TCP數據流(典型是HTTP數據流)

udp port 67:抓取發到/來自端口67的UDP數據流(典型是DHCP據流)

tcp port 21:抓取發到/來自端口21的TCP數據流(典型是FTP命令通道)

portrange 1-80:抓取發到/來自端口1-80的所有UDP/TCP數據流

tcp portrange 1-80:抓取發到/來自端口1-80的所有TCP數據流




(4)、當你需要抓取多個不連續端口號的數據流,將它們通過邏輯符號連接起來。

port 20 or port 21:抓取發到/來自端口20或21的UDP/TCP數據流(典型是FTP數據和命令端口)

host 10.3.1.1 and port 80:抓取發到/來自10.3.1.1端口80的數據流

host 10.3.1.1 and not port 80:抓取發到/來自10.3.1.1除了端口80以外的數據流

udp src port 68 and udp dst port 67:抓取從端口68到端口67的所有UDP數據流(典型是從DHCP客戶端到DHCP服務器)

udp src port 67 and udp dst port 68:抓取從端口67到端口68的所有UDP數據流(典型是從DHCP服務器到DHCP客戶端)

抓取TCP連接的開始(SYN)和結束(FIN)報文,配置tcp[tcpflags] & (tcp-syn|tcp-fin)!=0

抓取所有RST(Reset)標誌位爲1的TCP報文,配置tcp[tcpflags] & (tcp-rst)!=0

less (length):抓取小於等於某一長度的報文,等同於len <=(length)

greater (length):抓取大於等於某一長度的報文,等同於len >=(length)



(5)、抓取基於指定協議的數據流


你可能需要查看基於一個或幾個協議的數據流。通過目標應用的TCP、UDP或在TCP、UDP後加上端口號,將不相關的報文過濾掉。 

icmp:抓取發到/來自icmp的數據流

port 53:抓取發到/來自端口53的UDP/TCP數據流(典型是DNS數據流)

not port 53:抓取除了發到/來自端口53以外的UDP/TCP數據流

port 80:抓取發到/來自端口80的UDP/TCP數據流(典型是HTTP數據流)

udp port 67:抓取發到/來自端口67的UDP數據流(典型是DHCP據流)

tcp port 21:抓取發到/來自端口21的TCP數據流(典型是FTP命令通道)

portrange 1-80:抓取發到/來自端口1-80的所有UDP/TCP數據流

tcp portrange 1-80:抓取發到/來自端口1-80的所有TCP數據流


(6)、聯合查詢


運用邏輯運算符的聯合查詢

src host 192.168.11.183 && dst port 80:過濾源地址爲192.168.11.183,目的訪問80的流量




3.顯示過濾器:

通常經過捕捉過濾器過濾後的數據還是很複雜。此時您可以使用顯示過濾器進行更加細緻的查找。它的功能比捕捉過濾器更爲強大,而且在您想修改過濾器條件時,並不需要重新捕捉一次。 


 語法:

Protocol +[strng] +[Comparisonoperators] +Value  +[LogicalOperations] +[Other expression_r]

Protocol(協議):  您可以使用大量位於OSI模型第2至7層的協議。點擊"Expression..."按鈕後,能看到一系列的表達式。

wKiom1ewJtOxE9HaAACAIiuj-Hs178.png-wh_50


strng:子協議,輸入協議下的子協議,如輸入tcp下的子協議,圖中下拉出它的子協議,用"."引出,可層層多次包含子協議。

wKioL1ewJ5-jGuhkAACriNXO5DE771.png-wh_50




Comparisonoperators(比較運算符) 

英語寫法c語言寫法含義
eq==等於
ne!=不等於
gt>大於
It<小於
ge>=大於等於
Ie<=小於等於

Logicalexpression_rs(邏輯運算符):


英語寫法c語言寫法含義
and&&邏輯與
or||邏輯或
xor^^邏輯異或
not邏輯非


Other expression_r:同抓包過濾器一樣,其他的過濾語句,同邏輯運算符連用。






顯示特定數據流實例:

顯示過濾器可基於協議,應用,域名,或字符,對大小寫敏感。絕大多數簡單的顯示過濾器由小寫字母組成。與捕捉過濾器使用的BPF語法不同,顯示過濾器使用的是Wireshark特定的格式。除了某些特例之外,Wireshark顯示過濾器和捕捉過濾器有很大的區別。


(1)、基於IP地址或主機報文過濾

對於IPv4數據流,我們使用字段名ip.src,ip.dst,ip.addr;對於IPv6數據流,使用ipv6.src,ipv6.dst,ipv6.host以及ipv6.addr。

ip.addr==192.168.11.183顯示在IP源地址字段或IP目的地址字段包含192.168.11.183的幀。

ip.src==192.168.11.183顯示所有來自192.168.11.183的數據流。

ip.dst==192.168.11.183顯示所有發往192.168.11.183的數據流

!ip.addr==192.168.11.183顯示除了在IP源地址字段或IP目的地址字段包含192.168.11.183以外的幀

例如在filter欄輸入ip.dst == 192.168.11.183



(2)、基於端口號的過濾

tcp.port == 80過濾tcp的80端口。



(3)、協議過濾器

arp:顯示所有包括ARP請求和回覆在內的所有ARP數據流。

ip:顯示內含IPv4頭在內的(如ICMP目的地址不可達報文,在ICMP報文頭之後返回到來方向的IPv4頭)IP數據流。

ipv6:顯示所有IPv6數據流,包括內含IPv6報文頭的IPv4報文,如6to4,Teredo,以及ISATAP數據流。

tcp:顯示所有基於TCP的數據流。



(4)、字符過濾器:

tcp.analysis.flags:顯示所有包含TCP分析標識的所有報文,包括報文丟失,重傳,或零窗口標識。

tcp.analysis,zero_window:顯示含有表明發送方的接收緩存用完標識的報文

例tcp.flags.syn == 1:過濾三次握手fsyn=1的數據包



  回想之前所說的語法,也能感受到wireshark顯示過濾器語法的繁瑣,估計wireashark的開發者也意識到了這個,於是乎,就有了一下的功能

Prepare a Filter-->Selected ,就會在 Filter 框中自動生成過濾表達式。

 Apply as Filter-->Selected ,則該過濾表達式生成之後還會自動執行。

wKiom1ewLBiQF-pHAAIj5ixF4dM665.png-wh_50




4.個性化設置:

我們還可以通過自定義顏色,把更加關心的協議通過 View -->Coloring Rules 來設置顏色。

wKiom1ewKjnyFf0BAACmqu0iRfs276.png-wh_50


 曾在論壇看到又來了在諮詢:Wireshark 是按照什麼過濾出一個 TCP/UDP  Stream 的?

單擊 Wireshark 的 Statistics--

>Conversations ,再單擊 TCP 或者 UDP 標籤就可以看到所有的 Stream

wKioL1ewKviBYqNWAADLiG9WGao811.png-wh_50

可以看到兩端的 IP 加 port 。




四:wireshark高級功能

1.讓wireshark自動分析

單擊 Wireshark 的 Analyze-->Expert Info ,就可以在不同標籤下看到不同級別的提示信息。比如重傳的統計、連接的建立和重置統計,等等。在分析網絡性能和連接問題時,我們經常需要藉助這個功能。

wKioL1ewLMGhTaUhAABYkcb1tTg170.png-wh_50



2.搜索功能

 Wireshark 也可以通過 “Ctrl+F” 搜索關鍵字。假如我們懷疑包裏含有 “error” 一詞,就可以按下 “Ctrl+F” 之後選中 “String” 單選按鈕,然後在 Filter 中輸入 “error” 進行搜索,很多應用層的錯誤都可以靠這個方法鎖定問題包。

wKiom1ewLQqwA7tlAABF6NOuJCM496.png-wh_50



3.數據流追蹤功能

數據流追蹤將tcp、udp、ssl等數據流進行重組並完整呈現出來analyze–>follow tcp stream,紅色部分通過get包,瀏覽器,客戶端,網址等信息,藍色代表官網的反饋信息

wKioL1ewLaugsM3sAAD-2rY09KI467.png-wh_50


4.解碼能力

HTTP默認的端口是80端口,當我們訪問http服務時,訪問的端口是不是80端口,wireshark是不會按照HTTP協議去解析數據包,此時,我們就可以指定協議,去解析數據包。analyze–>Decode As...並選擇HTTP協議

wKiom1ewOzeh1RblAABIOtYHhXg763.png-wh_50




五、Wireshark統計功能


  Wireshark的一個強大的功能在於他的統計工具,使用Wireshark的時候我們有各種類型的工具可供選擇,這裏介紹基本網絡統計工具。包括:捕捉文件摘要(Summary)、捕捉包層次結構(Protocol Hirarchy)、會話(Conversations)、網絡節點(Endpoints)、HTTP


1.捕捉文件摘要

捕捉文件摘要對抓取的數據包進行全局統計,Staristics–>Summary,顯示數據包的名稱,大小,格式,時間,操作系統,版本,抓包接口說明,顯示網卡,平均每秒的包,平均每個包的結構……

wKioL1ewLtfh65d8AAC_E-qt0JE479.png-wh_50


這一菜單簡單收集所有抓包數據,在定義了過濾條件的時候,將呈現過濾後的數據,當想要知道每秒的平均報文數或字節數時,使用此工具

File:捕捉文件的一般信息,如文件名和路徑,長度,等等。

Tme:第一個包和最後一個包的時間戳,以及抓包過程持續時間。

Capure:顯示文件捕捉於哪一個接口,以及評論窗口。

Display窗口,展示抓包文件統計信息的摘要,包括:捕捉報文總數與百分比,顯示報文數量(加上過濾條件之後),標記報文數量



2.捕捉包層次結構

捕捉包層次結構統計了通信流量中不同協議佔用額百分比,通過這個工具可以對全網流量有直觀的瞭解,到底整個網絡那些流量佔用最多,那些佔用最少等等。打開statistics–>protocol hierarchy

wKiom1ewLy-jUYd-AACeEqBHjQY783.png-wh_50

圖中我們可以看出,Ethernet的流量包括IPv4和IPv6,IPv4包括UDP和TCP,這幾個分項的和就是以太網百分百的流量

Protocol:協議名稱

% Packets:含有該協議的包數目在捕捉文件所有包所佔的比例

Packets:含有該協議的包的數目、Bytes含有該協議的字節數

Mbit/s:抓包時間內的協議帶寬、End Packets 該協議中的包的數目(作爲文件中的最高協議層)

End Bytes:該協議中的字節數(作爲文件中的最高協議層)

End Mbit/s :抓包時間內的協議帶寬(作爲文件中的最高協議層)

在網絡異常的時候,通過分析這些數據包占用的流量我們可以判斷網絡問題,如圖這是一個正常的網絡佔用百分比,例如網絡發生了ARP***,那麼ARP在這裏的佔用也許會顯示20%或者30%



3.會話統計

會話統計功能,統計通信會話之間接收和發送的數據包和字節數,通過這個工具可以找出網絡中哪個會話(IP地址或端口號)最佔用帶寬,進一步作出網絡策略。打開Statistics–>Conversations

wKioL1ewL4-Qy6WLAADLiG9WGao754.png-wh_50


Ethernet以太網統計功能包括:mac通信統計,通信序包數,通信字節數;IPv4統計功能包括:IP通信統計,查看通信包數量,字節數;ipv6統計;tcp統計包括:源IP源端口,目的IP目的端口,查看包數量;udp會話統計包括:源IP源端口,目的IP目的端口,查看包數量

在tcp、udp裏還提供了流追蹤,圖形化A->B,圖形化B->A


我們可以通過wireshark會話統計發現很多問題

在以太網回話統計中可以查找以下問題:

(1) 可以看見較輕微的廣播風暴;而對於每秒數千甚至數萬個報文的嚴重廣播風暴,Wireshark會停止顯示數據並且屏幕凍結。只有斷開Wireshark連接時才能看見。

(2)如果你看到來自某一MAC地址的大量數據,查看會話第一部分的vendor ID,會給你一些導致問題的線索。即使MAC地址的第一部分標識了vendor,但它並不一定就標識了PC本身。這是由於MAC地址屬於PC上安裝的以太網芯片廠商,而並不一定屬於PC製造商。如果無法識別數據流來源地址,可以ping嫌疑地址並通過ARP獲取它的MAC地址,在交換機中查找該地址,如果有操作系統的話直接用find命令來定位。

在IP會話統計中可以查找一下問題:

(1)查看收發大量數據流的IP地址。如果是你知道的服務器(你記得服務器的地址或地址範圍),那問題就解決了;但也有可能只是某臺設備正在掃描網絡,或僅是一臺產生過多數據的PC。

(2) 查看掃描模式(scan pattern)。這可能是一次正常的掃描,如SNMP軟件發送ping報文以查找網絡,但通常掃描都不是好事情。

在tcp/udp會話統計中可以查看以下問題

(1) 查看帶有太多TCP連接的設備。每一個PC合理的連接數是10到20個,上百個則是不正常的

(2)嘗試查找無法辨識的端口號。它可能是正常的,但也可能是有問題的。




4、網絡節點統計

網絡節點功能,統計通信會話中每個節點接收和發送的數據包和字節數,通過這個工具可以找出網絡中哪個節點(IP地址或端口號)最佔用帶寬。打開statistics–>Endpoints,終端節點統計是面向IP的,可以查看具體某一個IP發送的流量以及佔用帶寬

wKiom1ewMMLACo_4AADAM3lfy3c126.png-wh_50



顯示按照長度劃分的序包。大部分包的正常長度爲40~5119。例如,網絡中有一種小型幀或巨型幀的***方式,利用發送數據包小於40或大於5119的包進行***,這時候可以在這裏查看數據包長度統計觀察這些異常包的百分比,找出網絡問題

在此窗口中能夠看到2,3,4層的endpoints,也就是以太網。IP,tcp或udp,終端節點統計是面向IP的,可以查看具體某一個IP發送的流量以及佔用帶寬

這一工具列出了Wireshark發現的所有endpoints上的統計信息,可以是一下任意一種情況:


(1.)少量以太網endpoints(MAC地址)與大量IP終端節點(IP地址):可能的情況例如,一個路由器從很多遠端設備收發報文,我們會看見路由器的MAC地址以及很多IP地址經由此處。


(2.)少量IP終端節點與大量tco終端節點:可能的情況是每一臺主機有很多個tcp連接。可能是有很多連接到額服務器的一個正常操作,也可能是一種網絡***(如SYN***)




5、HTTP

從statistic菜單,選擇HTTP,將會出現以下窗口


在http子菜單中,可以看到以下信息

wKioL1ewMaPR4MphAAGID20mJKM854.png-wh_50


Packet Counter:每一個網站的報文數量。幫助識別有多少響應和請求。

Requests:各網站的請求分佈

Load Distribution:各網站的負載分佈

查看Packet Couter統計信息,顯示以下過濾窗口,在此窗口中,可設置過濾條件以查看符合條件的統計信息。信息想要查看整個抓包文件的統計信息,不添加信息就會顯示IP層之上的統計信息,也就是所有http報文,點擊Create Stat。


要獲得指定HTTP主機的統計信息,設置過濾條件http.host contains(host_name)或http.host ==(host_name)通過設置過濾條件http.host contains baidu.com,可以獲得站點baidu.com的統計信息,點擊Create Stat按鈕

wKiom1ewMaSxkc_aAABPYOYB_eQ053.png-wh_50





6、圖表分析-IO Graph

IO Graph對網絡中的吞吐量進行實時圖形顯示。在wireshark抓包過程中打開statistic–>IO Graph

wKioL1ewNEHDHJXUAACY9YSQTqw448.png-wh_50

IO圖表展示了吞吐量過程,X軸表示時間流,y軸表示數據包,圖表默認情況下統計網卡的吞吐量


Craphs默認允許展示五條報表,例如在filter 過濾器中輸入http查看http在網絡中佔用的吞吐量,點擊Graph2,顯示出一條紅色的波線就是http圖表的吞吐量。管理員可以根據網絡環境,在filter過濾器中添加更多的過濾條件




7、圖表分析-Flow Gragh

Flow Gragh 數據流圖,將會話通信過程圖形可視化出來。打開statistics–>flow graph,選擇all對所有的包進行圖表分析,displayed packets對過濾出來的包進行圖表分析

wKiom1ewNQLA4Uc-AAEb06YVGys049.png-wh_50

圖表分析界面,掃描時間點,源IP,目的IP,具體包內容都以圖形化的方式顯示出來


對於wireshark抓完的包想保存下來,以便下次分析,保存時最好保存爲pcap格式,因爲幾乎所有抓包軟件兼容。


一般,我對於大量的數據包,我先觀察wireshark的統計功能給我統計出來的信息,然後針對相應的協議,自己需要的包,再用顯示過濾器給抓取出來。遺憾的是,對於詳細的包的內容,也是隻能看懂部分,與其說怪自己英語不好,不如說抓的包少了,分析的少了。不過學習畢竟是一步一步慢慢積累沉澱下來的。之後的學習還需多多努力了!

在此,我所瞭解的wireshark已經全部說完了,可以打開wireshark,開啓你的抓包之旅了。由於本人水平有限,文中若有錯誤,多多包涵,並且歡迎一起交流學習技術。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章