GNU開發工具——WireShark網絡分析工具

GNU開發工具——WireShark網絡分析工具

1、WireShark網絡分析工具簡介

一、WireShark簡介

Wireshark是目前全球使用最普遍的開源網絡封包分析軟件(前身爲Ethereal),由Gerald Combs編寫並於1998年以GPL開源許可證發佈。網絡封包分析軟件的功能是擷取網絡封包,並儘量顯示出最爲詳細的網絡封包資料。算法

二、WireShark架構

GNU開發工具——WireShark網絡分析工具
GUI:處理全部的用戶輸入輸出(全部窗體,對話框等)
Core:核心模塊,經過函數調用將其餘模塊鏈接在一塊兒
Epan:包分析引擎(WireShark Packetage Analyzing)
Protocol-Tree:負責獨立包的信息剖析。
Dissectors:存在於epan/dissectors目錄下的各類協議解析器,支持700+種協議解析,對於每種協議,×××都能識別出協議字段(field),並顯示出字段值(field value)。
Dissector Plugins:支持將解析器的具體實現做爲獨立模塊存在。
Display-Filters:顯示過濾引擎,源碼在epan/dfilter目錄
Capture:抓包引擎接口,利用libpcap/WinPcap從底層抓取網絡數據包,libpcap/WinPcap提供了通用的抓包接口,能從不一樣類型的網絡接口(包括以太網,令牌環網,ATM網等)獲取數據包。
Wiretap:wiretap庫用於讀寫捕獲的文件,讀寫格式時libpcap、 pcapng或者其餘類型的文件格式。
Dumpcap:捕獲引擎自己,執行須要提高權限。
WinPcap/libpcap:提供不一樣平臺的包捕捉以及過濾支持功能的庫。網絡

三、libpcap簡介

WireShark使用libpcap/WinPCAP做爲接口,直接與網卡進行數據報文交換。
libpcap(Packet Capture Library),即數據包捕獲函數庫,是Unix/Linux平臺下的網絡數據包捕獲函數庫,是一個獨立於系統的用戶層包捕獲的API接口,爲底層網絡監測提供了一個可移植的框架。
WinPcap是一個專爲Windows系統設計的、基於libpcap的庫。
地址:http://www.winpcap.org/
libpcap是一個c庫,用於網絡抓包和過濾,源於tcpdump項目。tcpdump項目中抓包、過濾、capture file的讀寫的代碼被提取出來成爲libpcap,由tcpdump項目的開發者維護。
libpcap主要由兩部份組成:網絡分接頭(Network Tap)和數據過濾器(Packet Filter)。網絡分接頭從網絡設備驅動程序中收集數據拷貝,過濾器決定是否接收該數據包。Libpcap利用BSD Packet Filter(BPF)算法對網卡接收到的鏈路層數據包進行過濾。BPF算法的基本思想是在有BPF監聽的網絡中,網卡驅動將接收到的數據包複製一份交給 BPF過濾器,過濾器根據用戶定義的規則決定是否接收此數據包以及須要拷貝該數據包的哪些內容,而後將過濾後的數據給與過濾器相關聯的上層應用程序。
libpcap的包捕獲機制就是在數據鏈路層加一個旁路處理。當一個數據包到達網絡接口時,libpcap首先利用已經建立的Socket從鏈路層驅動程序中得到該數據包的拷貝,再經過Tap函數將數據包發給BPF過濾器。BPF過濾器根據用戶已經定義好的過濾規則對數據包進行逐一匹配,匹配成功則放入內核緩衝區,並傳遞給用戶緩衝區,匹配失敗則直接丟棄。若是沒有設置過濾規則,全部數據包都將放入內核緩衝區,並傳遞給用戶層緩衝區。架構

2、WireShark快速抓包

一、WireShark主窗口

GNU開發工具——WireShark網絡分析工具
MENUS(菜單欄):顯示打開文件的路徑名稱
SHORTCUTS(工具欄,快捷方式):經常使用功能菜單的快捷方式
DISPLAY FILTER(顯示過濾器):顯示過濾器設置
PACKET LIST PANE(封包列表):封包列表
PACKET DETAILS PANE(封包詳細信息):選中封包的詳細信息
DISSECTOR PANE(16進制數據):選中封包的16進制數據
MISCELLANOUS(狀態欄,雜項)框架

二、網卡接口選擇

打開菜單欄Capture->Options,界面以下:
GNU開發工具——WireShark網絡分析工具less

三、快速抓包

選擇網卡,點擊「開始抓包」按鈕。
GNU開發工具——WireShark網絡分析工具tcp

四、中止抓包

點擊「中止抓包」按鈕,界面以下:
GNU開發工具——WireShark網絡分析工具ide

3、WireShark顯示設置

一、顯示設置

經過對顯示設置工具欄的按鈕進行設置,能夠放大、縮小、重置主界面的顯示區。
GNU開發工具——WireShark網絡分析工具函數

二、列設置

默認列表顯示:序號、時間、源、目的、協議、長度、信息
A、增長列
在封包詳細信息區的任意字段,如TTL,右鍵選擇菜單「Apply as Column」,將選擇的字段信息添加到封包列表區做爲一列。
GNU開發工具——WireShark網絡分析工具
B、刪除列
在封包列表區的某列右鍵點擊,選擇「Remove This Column」菜單項,將該列從列表區刪除。
GNU開發工具——WireShark網絡分析工具
C、修改列
在封包列表區的某列右鍵點擊,選擇「Edit Column」菜單項,能夠修改該列的名稱。工具

三、時間設置

A、時間格式設置
點擊菜單欄「View->Time Display Format」,選擇合適的時間顯示格式。
GNU開發工具——WireShark網絡分析工具
B、時間參考設置
選中封包列表區的Time列的某項,右鍵單擊菜單「Set/Unset Time Reference」設置該數據項爲時間參考點,能夠設置多個時間參考點。
GNU開發工具——WireShark網絡分析工具佈局

四、名字解析

名字解析將MAC地址、IP地址、端口號等轉換成名字,方便記憶,默認開啓MAC地址解析。
點擊菜單欄「Capture->Options->Options」,選中「Name Resolution」的三個複選框,以下圖:
GNU開發工具——WireShark網絡分析工具

4、WireShark數據包操做

一、標記數據包

A、標記/高亮數據包
在封包列表區選中某個封包,右鍵選擇「Mark/Unmark Packet」標記/取消標記高亮。
GNU開發工具——WireShark網絡分析工具
B、修改數據包顏色
在封包列表區單擊右鍵,選擇「Colorize Conversation->Ethernet->New Coloring Rule」菜單項,能夠對Ethernet協議進行具體的配色工做。
GNU開發工具——WireShark網絡分析工具
GNU開發工具——WireShark網絡分析工具

二、註釋數據包

在封包列表區的某個數據包上單擊鼠標右鍵,選擇「Packet Comment」菜單項,對數據包進行註釋。
GNU開發工具——WireShark網絡分析工具

三、合併數據包

點擊菜單欄「File->Merge」菜單項,彈出對話框,選擇要合併的數據包。
WireShark須要將當前抓取的數據包保存爲文件後才能和其餘數據包合併。

四、導出數據包

能夠導出特定的數據包,如過濾後的特定協議數據包、標記數據包、特定範圍內的數據包。
GNU開發工具——WireShark網絡分析工具
也能夠導出數據包爲其餘格式文件。

5、WireShark參數設置

一、首選項設置

點擊菜單欄「Edit->Preference」菜單項,
GNU開發工具——WireShark網絡分析工具
主界面佈局設置
GNU開發工具——WireShark網絡分析工具
封包列表區的列信息設置
GNU開發工具——WireShark網絡分析工具
字體和顏色設置
GNU開發工具——WireShark網絡分析工具

二、抓包選項設置

點擊菜單欄「Capture->Options」菜單項
A、網卡設置
GNU開發工具——WireShark網絡分析工具
B、多文件連續保存
建立一個文件名,開啓文件連續保存,如每一個文件達到1M或每隔1分鐘存取一個文件。
GNU開發工具——WireShark網絡分析工具
C、名字解析設置
多文件連續保存時,能夠選擇抓包中止的條件,抓取必定數量的數據包、抓取必定數量的文件時自動中止抓包。選取MAC地址解析、TCP解析等功能。
GNU開發工具——WireShark網絡分析工具

6、WireShark過濾器

一、抓包過濾器

經過BPF(Berkeley Packet Filter)語法選擇性抓取某些特定條件的數據包。
類型:host、net、port
方向:src、dst
協議:ether、ip、tcp、udp、http、ftp
邏輯運算符:與(&&)、或(||)、非(!)
A、ethernet過濾器
第二層過濾器,根據mac地址來進行過濾   

ether host XX:抓取源和目的爲指定的mac的以太網幀  
ether dst XX:抓取目的爲指定mac的以太網幀  
ether src XX:抓取源爲指定mac的以太網幀  
ether broadcast:抓取全部以太網廣播流量  
ether multicast:抓取多播流量  
ether proto <protocol>:抓取指定協議的以太網流量,好比以太網類型爲0x0800,ether proto 0800。以太網類型指的是以太網幀幀頭的ether-type字段,表示上層的協議類型。0x0800爲ipv四、0x86dd爲ipv六、0x0806爲arp。 
ether host 00:88:ca:86:f8:0d
ether src host 00:88:ca:86:f8:0d
ether dst host 00:88:ca:86:f8:0d

B、主機和網絡過濾器,第三層過濾器  
ip或ipv6:抓取ipv4或ipv6流量  

host <host>:抓取源或目的爲指定主機名(網址)或ip的流量  
dst host <host>:抓取目的爲指定主機名(網址)或ip的流量  
src host <host>:抓取源爲指定主機名(網址)或ip的流量  
gateway <host>:抓取穿越網關的流量,host必須是主機名。  
net <net>:抓取源或目的爲指定網絡號的流量,如:net 192.168.1或net 192.168.1.0  
dst net <net>:抓取目的爲指定網絡號的流量  
src net <net>:抓取源爲指定網絡號的流量  
net <net> mask <netmask>:抓取源或目的由net和mask共同指明的ipv4網絡號的流量,ipv6流量無效。如:net 192.168.1.0 mask 255.255.255.0  
dst net <net> mask <netmask>:抓取目的由net和mask共同指明的ipv4網絡號的流量,ipv6流量無效。  
src net <net> mask <netmask>:抓取源由net和mask共同指明的ipv4網絡號的流量,ipv6流量無效。  
net <net>/<len>:抓取源或目的爲指定網絡和長度的流量,如:net 192.168.1.0/24  
dst net <net>/<len>:抓取目的爲指定網絡和長度的流量  
src net <net>/<len>:抓取源爲指定網絡和長度的流量  
broadcast:抓取ip廣播包,一般如:ip broadcast  
multicast: 抓取ip多播包  
ip proto <protocol code>:抓取ip包頭協議類型字段值等於特定值的數據包。如:tcp爲6,udp爲17,icmp爲1  
ip6 proto <protocol>: 抓取ipv6包頭中下一個包頭字段值等於特定值的ipv6數據包。沒法用該原詞根據ipv6擴展包頭鏈中的相關字段值執行過濾。  
icmp [icmptype]==<identifier>:抓取特定類型[icmptype]的icmp數據包,<identifier>表示的是icmp頭部中的類型字段值,如,0(icmp echo reply數據包)或8(icmp echo request數據包)等。如:icmp[icmptype]==icmp-echo 或 icmp[icmptype]==8  
ip[2:2]==<number>:抓取指定長度的ip數據包(number表示ip包頭中的ip包總長度字段值)  
ip[8]==<number>:抓取具備指定ttl的ip數據包(number表示ip包頭中的ttl字段值)  
ip[9]==<number>:抓取指定協議類型的ip數據包(number表示ip包頭中的協議類型字段值)  
ip[12:4]==ip[16:4]:表示數據包源和目的ip相同  
注:中括號內的數字表示相關協議頭部的內容,第一個數字指從協議頭部的第幾個字節開始關注,第二個數字表示所要關注的字節數。
host 192.168.1.1
src host 192.168.1.1
dst host 192.168.1.1

C、tcp和udp及端口過濾,第四層 過濾器

port <port>:匹配port指明的端口號,如:port 80或port http  
dst port <port>:目的端口號爲指定的端口號  
src port <port>:源端口號爲指定的端口號  
tcp portrange <p1>-<p2>或udp portrange <p1>-<p2>:用來抓取端口範圍介於p1和p2之間的tcp或udp數據包  。
tcp src portrange <p1>-<p2>或udp dst portrange <p1>-<p2>  。
tcp [tcpflags] & (tcp-syn|tcp-fin)!=0:抓取tcp鏈接中用來發起鏈接(syn標記位置1)或終止鏈接(FIN標記位置1)的數據包 。
tcp [tcpflags] &(tcp-rst)!=0:抓取全部RST標記位置1的TCP數據包,RST標記位用來馬上拆除鏈接,PSH用來表示將數據提交給末端進程處理。  
less <length>:抓取不長於指定長度的數據包,寫法等價於:len <= <length>  
greater <length>:抓取不短於標識符指定的長度的數據包,寫法等價於:len >= <length>  
tcp portrange 2000-2500:抓取端口在這個範圍內的tcp數據包 。
tcp[13] & 0x00=0:抓取全部標記位都未置1的tcp流量(在懷疑遭遇空掃描***時使用) 。
tcp[13] & 0x01=1:抓取FIN位置1,但ACK位置0的TCP流量  
tcp[13] & 0x03=3:抓取SYN和FIN位同時置1的TCP流量  
tcp[13] & 0x05=5:抓取RST和FIN位同時置1的TCP流量  
tcp[13] & 0x06=6:抓取SYN和RST位同時置1的TCP流量  
tcp[13] & 0x08=8:抓取PSH位置1,但ACK位置0的TCP流量  
13指代TCP頭部中的標記字段,‘=’號後面數字表示tcp標記位的置位狀況。0表示標記位都沒置1,1表示FIN位置1,但ACK位置0,1+2表示SYN和FIN位同時置1,1+4表示RST和FIN同時置1,2+4表示SYN和RST同時置1,8表示PSH位置1,但ACK置0.  
port 80
! port 80
dst port 80
src port 80

D、複合過濾:
host 192.168.1.100 && port 8080
抓包過濾器在菜單欄「Capture->Options」
GNU開發工具——WireShark網絡分析工具

二、顯示過濾器

將抓取的數據包經過顯示過濾器過濾出某些特定的數據包。
邏輯操做符: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、tcp、udp、dns
過濾IP地址:

ip.addr == 192.168.1.1
ip.src == 192.168.1.1
ip.dst == 192.168.1.1
ip.src == 192.168.1.100 and ip.dst == 58.250.135.156

過濾端口:

tcp.port == 80
tcp.srcport == 80
tcp.dstport == 80
tcp.flag.syn == 1

過濾協議:

arp
tcp
udp
not http

複合過濾:

ip.src == 192.168.1.100 and tcp.dstport == 80
ip.addr == 192.168.1.106 and udp.port == 4000

7、WireShark高級功能

一、數據流追蹤

將TCP、UDP、SSL等碎片化的數據包進行重組並完整呈現出來。
單擊菜單欄「Analyze->Follow->TCP Stream」或是選中某個TCP數據包右鍵菜單「Folow->TCP Stream」,查看數據流。
GNU開發工具——WireShark網絡分析工具

二、專家信息

能夠對數據包中特定狀態進行警告說明。
點擊菜單欄「Analyze->Expert Information」菜單項
GNU開發工具——WireShark網絡分析工具
根據對統計出的不一樣級別(Error、Warning、Note、Chat)的數據包,點擊相應的數據包,主界面顯示區會跳到相應的數據包並高亮標記。

三、統計摘要信息

對抓取的數據包進行全局統計
點擊菜單欄「Statistics->Capture File Properties」菜單項
GNU開發工具——WireShark網絡分析工具
能夠查看抓取的數據包的統計信息。

四、協議分層統計

點擊菜單欄「Statistics->Protocol Hierarchy」菜單項
GNU開發工具——WireShark網絡分析工具
能夠統計通訊流量中不一樣協議佔用的百分比。

五、網絡節點統計

「Statistics->Endpoints」
GNU開發工具——WireShark網絡分析工具
統計通訊會話中每一個節點接收和發送的數據包和字節數,經過網絡節點統計能夠找出網絡中哪一個節點(IP地址或端口號)最佔用帶寬。

六、網絡會話統計

「Statistics->Conversations」
GNU開發工具——WireShark網絡分析工具
統計通訊會話之間接收和發送的數據包和字節數,經過網絡會話統計能夠找出網絡中哪一個會話(IP地址或端口號)最佔用帶寬。

七、數據包長度統計

「Statistics->Packet Lengths」
GNU開發工具——WireShark網絡分析工具
統計數據流量中數據包長度的分佈。

八、圖表分析

「Statistics->IO Graph」查看網絡吞吐量圖表。
GNU開發工具——WireShark網絡分析工具
對網絡中的吞吐流量進行實時圖形顯示,能夠對不一樣過濾條件過濾的數據包以不一樣的線型、顏色表示。
「Statistics->Flow Graph」查看數據流圖
GNU開發工具——WireShark網絡分析工具將會話通訊過程圖形可視化出來。

相關文章
相關標籤/搜索