您好,登錄后才能下訂單哦!
Wireshark是一款開源的網絡協議分析工具,是遵循GPL協議發布的自由軟件,因為以上原因,人們可以很容易在Wireshark上添加新的協議,或者將其作為插件整合到您的程序里,Wireshark支持Linux、Windows、MacOS等多個操作系統。
Wireshark在支持協議的數量方面是出類拔萃的—已經支持數千種協議,這些協議包括從最基礎的IP協議和DHCP協議到高級的專門應用協議比如AppleTalk和BitTorrent等。由于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,顧名思義就是用戶界面了。
在Windows系統中安裝很簡單。
第一步:到Wireshark的官方網站http://www.wireshark.org/ 上找到download頁面,并選擇一個鏡像點下載需要的版本。
第二步:下載好exe安裝包后,直接安裝,一路next,當彈出是否需要安裝WinPcap對話框時,務必要勾選install WinPcap選項。
從主下拉菜單中選擇Capture的Interfaces菜單項,彈出的窗口顯示出所有可以的網卡,選擇你想要使用的網卡,點擊工具欄的start按鈕開始捕獲數據,點擊工具欄的stop按鈕停止捕獲。這時Wireshark主窗口中就呈現了相應的數據。
Wireshark主窗口如下圖
Packet Lists(數據包列表):顯示了當前捕獲文件中的所有數據包,包括數據包序號、數據包被捕獲的相對時間,源地址、目標地址、協議、概況信息。
Packet Details(數據包詳情):分層次的顯示了一個數據包中的內容,并且可以展開或是收縮來顯示這個數據包中所捕獲到的全部內容。
Packet Bytes(數據包字節):同時以十六進制和ASCII碼的方式列出報文內容。
。
抓包過濾器配置于抓包之前,一經配置,Wireshark將只抓取經過抓包過濾器過濾的數據。抓包過濾器配置派生自libpcap/WinPcap庫中tcpdump的語法(可以從
http://wiki.wireshark.org/CaptureFilters找到捕捉過濾范例)。
抓包過濾器的配置步驟:選擇Capture | Options,彈出Capture Options窗口。雙擊選定的網卡,彈出EditInterface Settints窗口。
下圖顯示了Edit Interface Settings窗口,這里可以設置抓包過濾條件。如果你確知抓包過濾條件的語法,直接在Capture Filter區域輸入。在輸入錯誤時,Wireshark通過紅色背景區域表明無法處理過濾條件。最有可能的情況是,過濾條件中含有輸入錯誤,或是使用了 display filter的語法。點擊Capture Filter按鈕查看并選擇已保存的抓包過濾條件。
小貼士:
Wireshark包含了一些默認的抓包過濾條件。點擊主工具欄的Edit Capture Filters,跳轉到已保存抓包過濾列表。你會發現一些常見抓包過濾的示例。
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/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個重要區域組成
FieldName(協議頭部中的字段名稱)區域,在該區域,可利用Wireshark預定義的協議模板來配置顯示過濾器所含各參數。點最左邊的“+”號,即可瀏覽到相關協議的各個屬性(或協議頭部中個字段的名稱)
Relation(關系)區域,可從該區域選擇條件操作符
Value(值)區域,可在該區域的輸入欄內輸入事先從Field Name區域中選擇的協議頭部字段的熟悉值
Predefinedvalues(預定義值),該區域的值取決于Field Name設定的協議類型和協議屬性
Range(offset:length)(范圍(偏移:長度))區域,構造字節偏移型過濾器
2、在顯示過濾器工具條的Filter輸入欄內直接輸入顯示過濾語句,可借助于自動補齊特性,來完成過濾器的構造。比如,若在Filter輸入欄內輸入tcp.f時,自動補齊特性將會生效,會使Wireshark在輸入欄下自動列出所有以tcp.f打頭的顯示過濾器參數。
小貼士:
如何獲取顯示過濾器所包含的參數:在Wireshark抓包主窗口的數據包結構區域中,只要選中了任意一種協議頭部的某個字段,與該字段相對應的顯示過濾參數將會出現在抓包主窗口底部狀態欄的左側。
配置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地址之外的所有發出的數據包
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多播數據包
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。