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:數據包統計區域
1..菜單欄選項介紹
(1)、flie(文件)欄用於打開,合併文件,保存,另存,導出爲特殊文件等等操作
(2)、Edit(編輯)菜單欄,查詢數據包,數據包標誌、時間設置等操作
(3)、view(試圖)菜單欄調整主界面信息
(4)、Capture(捕獲)菜單欄,選擇網卡,開始,停止抓包,過濾器等操作
(5)、Analyze(分析)菜單欄,顯示過濾器,tcp、udp包追蹤等功能
(6)、Statistics(統計)欄,數據彙總信息,會話選項,節點統計,IO圖,流量圖等,做出很多會話報表
(7)、Telephony(電話)支持語音流量功能
(8)、Tools(工具)
(9)、help幫助界面
2.快捷方式菜單
使用工具中的常用按鈕,分別有:查看網卡,列出接口選項,啓動,停止,重置,打開,着色…等
3.過濾欄
輸入語法過濾出想要的數據包,如過濾基於udp協議的數據包,在filter欄輸入udp,回車,列出基於udp的所有數據包
4.數據包列表區
數據包列表區列出了包的時間流、源IP、目的IP、協議、信息
5.數據詳細信息區
在列表區選中數據包的時候,數據包的詳細信息顯示在下方,我們稱爲詳細信息區
6..比特區
數據包字節,十六進制信息,通過比特區看到更詳細的字段信息
介紹完基本的界面,開始讓wireshark開始工作吧,打開wireshark,選擇網卡,start,開啓抓包之旅。
讓人頭痛的是,這麼多包,怎麼看,從哪看,在上大學時,我們老師向我們介紹wireshark的時候,我同樣的頭疼,每次抓包都不知道怎樣去尋找自己想要的包。後來經過看wireshark和書和視頻,學習他們的使用技巧。
三:wireshark抓包技巧
在拿到一個包,我們總是希望它儘量的小,所以抓包時應該儘量只抓必要的部分。
1.只抓包頭
Capture-->Options 雙擊網卡信息,在Limit each packet to 處輸入數值,我在此輸入了80 字節,也就是說每個包只抓前 80 字節。如果問題涉及應用層,就應該再加上應用層協議頭的長度。如果你像我一樣經常忘記不同協議頭的長度,可以輸入一個大點的值。
2.抓包過濾器
Capture-->Options下的Capture Files,抓包過濾器,這是wireshark重要的功能,這裏可以設置抓取特定流量過濾條件,如果你確定過濾條件的語法,直接在Capture Filter區域輸入。在輸入錯誤時,Wireshark通過紅色背景區域表明無法處理過濾條件。
點擊Capture Filter 按鈕查看並選擇,wireshark其中自身帶一些過濾規則實例
過濾器規語法:
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..."按鈕後,能看到一系列的表達式。
strng:子協議,輸入協議下的子協議,如輸入tcp下的子協議,圖中下拉出它的子協議,用"."引出,可層層多次包含子協議。
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 ,則該過濾表達式生成之後還會自動執行。
4.個性化設置:
我們還可以通過自定義顏色,把更加關心的協議通過 View -->Coloring Rules 來設置顏色。
曾在論壇看到又來了在諮詢:Wireshark 是按照什麼過濾出一個 TCP/UDP Stream 的?
單擊 Wireshark 的 Statistics--
>Conversations ,再單擊 TCP 或者 UDP 標籤就可以看到所有的 Stream
可以看到兩端的 IP 加 port 。
四:wireshark高級功能
1.讓wireshark自動分析
單擊 Wireshark 的 Analyze-->Expert Info ,就可以在不同標籤下看到不同級別的提示信息。比如重傳的統計、連接的建立和重置統計,等等。在分析網絡性能和連接問題時,我們經常需要藉助這個功能。
2.搜索功能
Wireshark 也可以通過 “Ctrl+F” 搜索關鍵字。假如我們懷疑包裏含有 “error” 一詞,就可以按下 “Ctrl+F” 之後選中 “String” 單選按鈕,然後在 Filter 中輸入 “error” 進行搜索,很多應用層的錯誤都可以靠這個方法鎖定問題包。
3.數據流追蹤功能
數據流追蹤將tcp、udp、ssl等數據流進行重組並完整呈現出來analyze–>follow tcp stream,紅色部分通過get包,瀏覽器,客戶端,網址等信息,藍色代表官網的反饋信息
4.解碼能力
HTTP默認的端口是80端口,當我們訪問http服務時,訪問的端口是不是80端口,wireshark是不會按照HTTP協議去解析數據包,此時,我們就可以指定協議,去解析數據包。analyze–>Decode As...並選擇HTTP協議
五、Wireshark統計功能
Wireshark的一個強大的功能在於他的統計工具,使用Wireshark的時候我們有各種類型的工具可供選擇,這裏介紹基本網絡統計工具。包括:捕捉文件摘要(Summary)、捕捉包層次結構(Protocol Hirarchy)、會話(Conversations)、網絡節點(Endpoints)、HTTP
1.捕捉文件摘要
捕捉文件摘要對抓取的數據包進行全局統計,Staristics–>Summary,顯示數據包的名稱,大小,格式,時間,操作系統,版本,抓包接口說明,顯示網卡,平均每秒的包,平均每個包的結構……
這一菜單簡單收集所有抓包數據,在定義了過濾條件的時候,將呈現過濾後的數據,當想要知道每秒的平均報文數或字節數時,使用此工具
File:捕捉文件的一般信息,如文件名和路徑,長度,等等。
Tme:第一個包和最後一個包的時間戳,以及抓包過程持續時間。
Capure:顯示文件捕捉於哪一個接口,以及評論窗口。
Display窗口,展示抓包文件統計信息的摘要,包括:捕捉報文總數與百分比,顯示報文數量(加上過濾條件之後),標記報文數量
2.捕捉包層次結構
捕捉包層次結構統計了通信流量中不同協議佔用額百分比,通過這個工具可以對全網流量有直觀的瞭解,到底整個網絡那些流量佔用最多,那些佔用最少等等。打開statistics–>protocol hierarchy
圖中我們可以看出,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
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發送的流量以及佔用帶寬
顯示按照長度劃分的序包。大部分包的正常長度爲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子菜單中,可以看到以下信息
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按鈕
6、圖表分析-IO Graph
IO Graph對網絡中的吞吐量進行實時圖形顯示。在wireshark抓包過程中打開statistic–>IO Graph
IO圖表展示了吞吐量過程,X軸表示時間流,y軸表示數據包,圖表默認情況下統計網卡的吞吐量
Craphs默認允許展示五條報表,例如在filter 過濾器中輸入http查看http在網絡中佔用的吞吐量,點擊Graph2,顯示出一條紅色的波線就是http圖表的吞吐量。管理員可以根據網絡環境,在filter過濾器中添加更多的過濾條件
7、圖表分析-Flow Gragh
Flow Gragh 數據流圖,將會話通信過程圖形可視化出來。打開statistics–>flow graph,選擇all對所有的包進行圖表分析,displayed packets對過濾出來的包進行圖表分析
圖表分析界面,掃描時間點,源IP,目的IP,具體包內容都以圖形化的方式顯示出來
對於wireshark抓完的包想保存下來,以便下次分析,保存時最好保存爲pcap格式,因爲幾乎所有抓包軟件兼容。
一般,我對於大量的數據包,我先觀察wireshark的統計功能給我統計出來的信息,然後針對相應的協議,自己需要的包,再用顯示過濾器給抓取出來。遺憾的是,對於詳細的包的內容,也是隻能看懂部分,與其說怪自己英語不好,不如說抓的包少了,分析的少了。不過學習畢竟是一步一步慢慢積累沉澱下來的。之後的學習還需多多努力了!
在此,我所瞭解的wireshark已經全部說完了,可以打開wireshark,開啓你的抓包之旅了。由於本人水平有限,文中若有錯誤,多多包涵,並且歡迎一起交流學習技術。