Wireshark學習總結

簡介

Wireshark是一款開源的網絡協議分析工具,是遵循GPL協議發佈的自由軟件,因爲以上原因,人們可以很容易在Wireshark上添加新的協議,或者將其作爲插件整合到您的程序裏,Wireshark支持Linux、Windows、MacOS等多個操作系統。

Wireshark在支持協議的數量方面是出類拔萃的—已經支持數千種協議,這些協議包括從最基礎的IP協議和DHCP協議到高級的專門應用協議比如AppleTalk和BitTorrent等。由於Wireshark在開源模式下開發,每次更新都會增加一些對新協議的支持。

wireshark架構

參見下圖從功能上,wireshark可以被劃分爲四個主要模塊:Capture Core,WireTap, Protocol Interpreter and Dissector和GUIintrerface。其中Capture Core使用pcap(windows下爲winpcap,linux下爲libpcap)抓取網絡數據包,獲取數據包後,WireTap把它保存爲二進制文件,interpreter and dissector就是把二進制文件展現成用戶容易理解的文本形式,其中dissector又分爲build-in和plug-in兩種,build-in很好理解,plug-in在1.3節會詳細介紹一下;GUIinterface,顧名思義就是用戶界面了。

wKiom1bmchTyNp92AAC7yVxwt8E929.jpg

 



Wireshark的安裝

在Windows系統中安裝很簡單。

第一步:到Wireshark的官方網站http://www.wireshark.org/ 上找到download頁面,並選擇一個鏡像點下載需要的版本。

第二步:下載好exe安裝包後,直接安裝,一路next,當彈出是否需要安裝WinPcap對話框時,務必要勾選install WinPcap選項。


 

使用Wireshark捕獲數據包。

從主下拉菜單中選擇Capture的Interfaces菜單項,彈出的窗口顯示出所有可以的網卡,選擇你想要使用的網卡,點擊工具欄的start按鈕開始捕獲數據,點擊工具欄的stop按鈕停止捕獲。這時Wireshark主窗口中就呈現了相應的數據。

Wireshark主窗口如下圖


wKiom1bmc4PTDn9XAAQuq9oHKU4781.jpg

Packet Lists(數據包列表):顯示了當前捕獲文件中的所有數據包,包括數據包序號、數據包被捕獲的相對時間,源地址、目標地址、協議、概況信息。

Packet Details(數據包詳情):分層次的顯示了一個數據包中的內容,並且可以展開或是收縮來顯示這個數據包中所捕獲到的全部內容。

Packet Bytes(數據包字節):同時以十六進制和ASCII碼的方式列出報文內容。

抓包過濾器的配置

抓包過濾器配置於抓包之前,一經配置,Wireshark將只抓取經過抓包過濾器過濾的數據。抓包過濾器配置派生自libpcap/WinPcap庫中tcpdump的語法(可以從

http://wiki.wireshark.org/CaptureFilters找到捕捉過濾範例)。

抓包過濾器的配置步驟:選擇Capture | Options,彈出Capture Options窗口。雙擊選定的網卡,彈出EditInterface Settints窗口。

wKioL1bmdDXQwIaXAADgnf1_H9o245.jpg

下圖顯示了Edit Interface Settings窗口,這裏可以設置抓包過濾條件。如果你確知抓包過濾條件的語法,直接在Capture Filter區域輸入。在輸入錯誤時,Wireshark通過紅色背景區域表明無法處理過濾條件。最有可能的情況是,過濾條件中含有輸入錯誤,或是使用了 display filter的語法。點擊Capture Filter按鈕查看並選擇已保存的抓包過濾條件。

wKioL1bmdEDhFzCYAAEVK0jYyrM982.jpg

小貼士:

Wireshark包含了一些默認的抓包過濾條件。點擊主工具欄的Edit Capture Filters,跳轉到已保存抓包過濾列表。你會發現一些常見抓包過濾的示例。

 

配置Ethernet過濾器

Ethernet過濾器即爲第二層(OSI模型的第二層)過濾器,即根據MAC地址來行使過濾功能的抓包過濾器。抓包原理:Ethernet抓包引擎會先拿用戶事先指定的源/或目的主機MAC地址,與抓取的以太網流量的源/或目的主機MAC地址相比較,再篩選出源/或目的主機MAC地址相匹配的流量。

  • ether host <Ethernet host > 讓Wireshark只抓取源於或發往由標識符Ethernethost所指定的以太網主機的以太網幀

例如:ether host00:24:d6:ab:98:b6

  • ether dst <Ethernet host > 讓Wireshark只抓取發往由標識符Ethernethost所指定的以太網主機的以太網幀

例如:ether dst00:24:d6:ab:98:b6

  • ether src<Ethernet host > 讓Wireshark只抓取由標識符Ethernethost所指定的以太網主機發出的以太網幀

例如:ether src 00:24:d6:ab:98:b6

  • ether broadcast 讓Wireshark只抓取所有以太網廣播流量

例如:ether broadcast

  • ether multicast 讓Wireshark只抓取所有以太網多播流量

例如:ether multicast

  • ether proto <protocol>所抓以太網流量的以太網協議類型編號,與標識符protocol所定義的以太網協議類型編號匹配

例如:ether proto 0800

  • vlan <vlan_id>讓Wireshark只抓取由標識符vlan_id所指定的VLAN的流量

例如:vlan 9999

要想讓抓包過濾器中的字符串起反作用,需在原詞之前添加關鍵字not或符號“!”

 

配置主機或網絡過濾器

主機或網絡過濾器是基於IP地址的第三層過濾器。原理:若根據主機名進行過濾,則wireshark會把用戶輸入的主機名轉換爲iP地址,並抓取與這一IP地址相對於的流量。

  • host <host> 讓Wireshark只抓取源於或發往由標識符host所指定的主機名或IP地址的IP流量。

例如:host 101.10.10.2     host funshion.game.com

  • dst host <host> 讓Wireshark只抓取發往由標識符host所指定的主機名或IP地址的IP流量。

例如:dst host 101.10.10.2

  • src host <host> 讓Wireshark只抓取源於由標識符host所指定的主機名或IP地址的IP流量。

例如:src host 101.10.10.2

  • net <net > 讓Wireshark只抓取源於或發往由標識符net所標識的IPv4/IPv6網絡號的流量

例如:net 192.168.1.0/24

  • dst <net > 讓Wireshark只抓取發往由標識符net所標識的IPv4/IPv6網絡號的流量

  • src <net > 讓Wireshark只抓取源於由標識符net所標識的IPv4/IPv6網絡號的流量

  • broadcast 讓Wireshark只抓取IP廣播包

  • multicast 讓Wireshark只抓取IP多播包

  • ip proto <protocol code> 讓Wireshark只抓取IP包頭的協議類型字段值等於特定值的數據包(比如TCP數據包爲6,UDP數據包爲17,ICMP數據包爲1)

例如:ip proto 1

  • icmp [icmptype] == <identifier> 讓Wireshark只抓取特定類型[icmptype]的ICMP數據包

例如:icmp [icmptype] ==icmp-echo 或icmp [icmptype] ==8

  • ip[2:2] == <number> 用來抓取特定長度的數據包

配置TCP/UDT及端口過濾器

根據第四層協議TCP/UDT的端口號來進行過濾,原理:第四次協議(主要指TCP/UPD)互連末端應用程序的協議,對於TCP和UPD而言,端口號就是用來標識應用程序的代號。

  • port <port>Wireshark所抓數據包的源或目的端口號將匹配標識符port所指明的端口號

例如:port 5080

  • dst port <port> Wireshark所抓數據包的目的端口號將匹配標識符port所指明的端口號

例如:dst port 80 或 dst port http

  • src port <port> Wireshark所抓數據包的源端口號將匹配標識符port所指明的端口號

  • tcp portrange <p1>-<p2> 或 udp portrange <p1>-<p2> 用來抓取源或目的端口號介於p1和p2之間的TCP活UDP數據包

例如:tcpportrange 2000-2500

  • tcp src portrange <p1>-<p2> 或 udp src portrange <p1>-<p2> 用來抓取源端口號介於p1和p2之間的TCP活UDP數據包

  • tcp dst portrange <p1>-<p2> 或 udp dst portrange <p1>-<p2> 用來抓取目的端口號介於p1和p2之間的TCP活UDP數據包

  • less <length> 讓Wireshark只抓取不長於標識符length所指定長度的數據包,等同於len <=<length>

  • greater <length> 讓Wireshark只抓取不短於標識符length所指定長度的數據包,等同於len >=<length>

  • 複合型過濾器

舉例1:讓Wireshark只抓取TCP連接中用來發起連接或終止連接的數據包

tcp [tcpflags]& (tcp-syn | tcp-fin)!=0

舉例2:讓Wireshark抓取來源於game.funshion.com的http流量

hostgame.funshion.com and port 80

配置字節偏移或淨載匹配型過濾器

就過濾功能而言,字節偏移或淨載匹配型過濾器要更加靈活,可以配置自定義型抓包過濾器。

格式:proto <Offset : bytes> 根據TCP、UDP、IP 等協議頭部中的某些字段值來實施過濾

  • ip  <Offset : bytes> 針對ip層實施過濾

  • tcp <Offset : bytes> 針對TCP頭部中的某些字段值實施過濾

  • udp <Offset : bytes>針對UDP頭部中的某些字段值實施過濾

例如:讓Wireshark抓取目的端口範圍爲50~100的TCP數據包

tcp[2:2] >50 and tcp[2:2]<100  (第一個數字2指明從tcp頭部的第二個字節起開始檢查,第二個數據2指明瞭檢查範圍爲2個字節)

顯示過濾器的配置

顯示過濾器配置於抓包之後,一經配置,Wireshark將只顯示經過顯示過濾器過濾的數據(可以在WiresharkWiki Display頁找到發現大量的顯示過濾範例。http://wiki.wireshark.org/DisplayFilters

與捕捉過濾器使用的語法不同,顯示過濾器使用的是Wireshark特定的格式。

顯示過濾器比較運算符

1.==或eq

例如:ip.src == 10.2.2.2顯示所有源地址爲10.2.2.2的IPv4數據流
2. !=或ne

例如:tcp.srcport != 80顯示源端口除了80以外的所有TCP數據流
3. >或gt

例如:frame.time_relative > 1顯示距前一個報文到達時間相差1秒的報文
4. <或lt

例如:tcp.window_size < 1460顯示當TCP接收窗口小於1460字節時的報文
5. >=或ge

例如:dns.count.answers >= 10顯示包含10個以上answer的DNS響應報文
6. <=或le

例如:ip.ttl <= 10顯示IP報文中Time to Live字段小於等於10的報文
7. Contains

例如:http contains “GET”顯示所有HTTP客戶端發送給HTTP服務器的GET請求

配置顯示過濾器的方法:

1、藉助於顯示過濾器的窗口,點擊過濾器工具條上的Extensions…按鈕,彈出Filter Expression窗口,如下圖,該窗口由5個重要區域組成

wKiom1bmdA-BvCfoAAIOI3iArX4076.jpg

FieldName(協議頭部中的字段名稱)區域,在該區域,可利用Wireshark預定義的協議模板來配置顯示過濾器所含各參數。點最左邊的“+”號,即可瀏覽到相關協議的各個屬性(或協議頭部中個字段的名稱)

Relation(關係)區域,可從該區域選擇條件操作符

Value(值)區域,可在該區域的輸入欄內輸入事先從Field Name區域中選擇的協議頭部字段的熟悉值

Predefinedvalues(預定義值),該區域的值取決於Field Name設定的協議類型和協議屬性

Range(offset:length)(範圍(偏移:長度))區域,構造字節偏移型過濾器

2、在顯示過濾器工具條的Filter輸入欄內直接輸入顯示過濾語句,可藉助於自動補齊特性,來完成過濾器的構造。比如,若在Filter輸入欄內輸入tcp.f時,自動補齊特性將會生效,會使Wireshark在輸入欄下自動列出所有以tcp.f打頭的顯示過濾器參數。

小貼士:

如何獲取顯示過濾器所包含的參數:在Wireshark抓包主窗口的數據包結構區域中,只要選中了任意一種協議頭部的某個字段,與該字段相對應的顯示過濾參數將會出現在抓包主窗口底部狀態欄的左側。

配置EthernetARP、主機和網絡過濾器

配置Ethernet(OSI模型的第二層)顯示過濾器的目的,讓wireshark只顯示相關的第二層以太網幀,依據的是MAC地址或Ethernet幀的某些熟悉。

  • 常用的Ethernet顯示過濾器:

eth.addr==<MACAddress>讓wireshark只顯示具有指定MAC地址的數據幀

例如:eth.addr==00:24:d6:ab:98:b6 讓wireshark只顯示具有指定MAC地址00:24:d6:ab:98:b6的數據幀

eth.src==<MAC Address> 讓wireshark只顯示具有指定源MAC地址的數據幀

例如:eth.src== 00:24:d6:ab:98:b6 讓wireshark只顯示源於MAC地址爲00:24:d6:ab:98:b6的數據幀

eth.dst==<MAC Address>6 讓wireshark只顯示具有指定目的MAC地址數據幀

例如:eth.dst== 00:24:d6:ab:98:b6 讓wireshark只顯示目的MAC地址爲00:24:d6:ab:98:b6的數據幀

eth.dst== ffff.ffff.ffff 讓wireshark只顯示以太網廣播幀

常用的ARP過濾器

 

arp.opcode==<value>讓wireshark只顯示指定類型的ARP幀,例如:

arp.opcode== 1 讓wireshark只顯示ARP請求幀

arp.opcode== 2 讓wireshark只顯示ARP應答幀

arp.src.hw_mac==<MAC Address> 讓wireshark只顯示由指定MAC地址的主機發出的ARP幀

配置ip(OSI模型的第三層)顯示過濾器的目的,讓wireshark只顯示必要的第三層數據包,依據的是IP地址或IP數據包的的某些熟悉

 

常用的IP和ICMP過濾器

ip.addr== <IP Address>讓Wireshark只顯示源於或發往設有指定IP地址的主機的數據包

例如:ip.addr==200.1.1.1 and ip.addr ==192.168.1.1

ip.src== <IP Address>讓wireshark只顯示由設定ip地址發出的數據包

ip.src== 101.10.10.2

ip.dst== <IP Address>讓wireshark只顯示發往設定ip地址的主機的數據包

ip.ttl==<value>讓wireshark只顯示IP包頭中TTL字段值爲指定值的數據包

ip.len==<value>讓wireshark只顯示指定長度的IP數據包

ip.version==<value>讓wireshark只顯示指定版本號的IP數據包

!Ip.src== 101.10.10.2讓wireshark顯示除了設定ip地址之外的所有發出的數據包

配置TCPUDP主機和網絡過濾器

  • tcp.port == <value> 或udp.port == <value>讓Wireshark在顯示數據包時,根據指定的TCP/UDP源、目的端口號來篩選。

例如:tcp.port == 80

 tcp.dstport== <value> 或udp.dstport== <value>讓Wireshark在顯示數據包時,根據指定的TCP/UDP目的端口號來篩選。

例如:tcp.dstport ==80

  • tcp.srcport == <value> 或udp.srcport == <value>讓Wireshark在顯示數據包時,根據指定的TCP/UDP源端口號來篩選。

例如:tcp.srcport ==80

  • tcp.flags:Wireshark檢查數據包TCP頭部中個標記位的置位情況

例如:tcp.flags.syn == 1:讓Wireshark顯示SYN標記位置1的TCP數據包

       tcp.flags.reset ==1:讓Wireshark顯示RST標記位置1的TCP數據包

    tcp.flags.fin== 1:讓Wireshark顯示FIN標記位置1的TCP數據包

要想讓抓包過濾器中的字符串起反作用,需在原詞之前添加關鍵字not或符號“!”

 

配置應用層協議的顯示過濾器

常用的HTTP顯示過濾器

http.host== <”hostname”> :讓Wireshark只顯示訪問某指定主機名的HTTP協議數據包

http.request.method== ”GET”: 讓Wireshark只顯示包含HTTP GET方法的HTTP協議數據包

http.request.uri==  <”Full request URI”>讓Wireshark只顯示HTTP客戶端發起的包含指定URI請求的HTTP協議數據包。

http.request.uricontens “URI String” 讓Wireshark只顯示HTTP客戶端發起的包含指定字符串的URI請求的HTTP協議數據包。

http.cookie:讓Wireshark只顯示網絡中傳播的所有包含cookie請求的HTTP協議數據包

http.set_cookie:讓Wireshark只顯示所有包含由HTTP服務器發送給HTTP客戶端的cookie set命令的HTTP協議數據包。

(http.set_cookie)&& (http contens”google”):讓Wireshark只顯示所有由google HTTP服務器發送給HTTP客戶端,且包含cookie set命令的HTTP協議數據包

httpmatches “\.zip” && http.request.method == “GET”:讓Wireshark只顯示包含ZIP文件的HTTP數據包。

 

常見的DNS顯示過濾器

讓Wireshark只顯示DNS查詢和DNS響應數據包

dns.flags.response== 0 (DNS 查詢)

dns.flags.response== 1(DNS 響應)

讓Wireshark只顯示所有anser count字段值大於或等於4的DNS響應數據包

dns.count.answers>=4

配置字節偏移型過濾器

通用格式爲:protocols[x:y] == <value> 先通過x來定位到數據包協議頭部中的某個字段,並檢查接下來y個字節的值是否等於value,Wireshark根據檢查結果來顯示抓包文件中的相關數據。這種過濾器的應用場合非常廣泛,只要熟知各種協議頭部的格式,對其中各字段的位置及長度瞭然於胸,就能使用它在抓包文件中篩選出自己想看的數據包。

例如:eth.dst[0:3] == 01:00:5e,讓Wireshark只顯示IPV4多播數據包


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