Wireshark的世界裏有2種過濾器,分別是捕獲過濾器和顯示過濾器,採用恰當的過濾器,不但能提高數據分析的靈活性,而且能讓分析者更快看到自己想要的分析對象。
這裏只是簡單的使用wireshark,關於其高級功能可以自行百度,我的需求就是查看客戶端是否向我本地的服務器發送了請求,由於本地服務器沒用收到請求,此時再抓包進行判斷一下,如果抓包也沒有的話,那就說明客戶端沒用發送請求(這樣就說明我這邊沒用問題,成功把鍋甩了出去),所以只分析http tcp層的協議。
1.在使用Wireshark時,首先需要使用捕獲過濾器先過濾我們感興趣的請求,字面意思理解一下什麼是捕獲過濾器?我的理解就是使用捕獲過濾器來捕獲我們感興趣的。
捕獲過濾器表達式語法:
可以看到一個捕獲過濾器表達式可以由一個或多個原語組成,其中原語包含一個或多個限定詞,然後跟着一個ID名字或數字。
其中限定詞有三類,分別爲:
Type : host、net、port 指出其後數字或名字的意義
Direction:src、dst 指出傳輸方向
Protocol: ether、ip、tcp、udp、http、ftp 指出協議
操作符:
與:&&
或:||
非:!
e.g. : dst host 192.168.0.12 && tcp port 80
注:我們使用 (&&、||、! )對原語進行組合
常用捕獲過濾表達式:
捕獲過濾表 | 含義 |
ip src host 10.1.1.1 | 顯示來源IP地址爲10.1.1.1的數據包 |
!tcp | 抓取80端口的數據包 |
port 80 | 篩選端口爲80的數據包 |
host www.example.com | 過濾指定域名規則 |
src host 192.168.1.104 && dst port 80 | 抓取主機地址爲192.168.1.80、目的端口爲80的數據包 |
host 192.168.1.104 || host 192.168.1.102 | 抓取主機爲192.168.1.104或者192.168.1.102的數據包 |
2.在使用捕獲過濾器來捕獲數據包之後,還可以使用使用顯示過濾器進行
一條基本的顯示過濾表達式由過濾項、過濾關係、過濾值三項組成。
比如ip.addr == 192.168.1.1,這條表達式中ip.addr是過濾項、==是過濾關係,192.168.1.1是過濾值(整條表達示的意思是找出所有ip協議中源或目標ip、等於、192.168.1.1的數據包)
過濾項:
wireshark的過濾項是“協議“+”.“+”協議字段”的模式。以端口爲例,端口出現於tcp協議中所以有端口這個過濾項且其寫法就是tcp.port。
推廣到其他協議,如eth、ip、udp、http、telnet、ftp、icmp、snmp等等其他協議都是這麼個書寫思路。當然wireshark出於縮減長度的原因有些字段沒有使用協議規定的名稱而是使用簡寫(比如Destination Port在wireshark中寫爲dstport)又出於簡使用增加了一些協議中沒有的字段(比如tcp協議只有源端口和目標端口字段,爲了簡便使用wireshark增加了tcp.port字段來同時代表這兩個),但思路總的算是不變的。而且在實際使用時我們輸入“協議”+“.”wireshark就會有支持的字段提示(特別是過濾表達式字段的首字母和wireshark在上邊2窗口顯示的字段名稱首字母通常是一樣的),看下名稱就大概知道要用哪個字段了。wireshark支持的全部協議及協議字段可查看官方說明。
過濾關係:
過濾關係就是大於、小於、等於等幾種等式關係,我們可以直接看官方給出的表。注意其中有“English”和“C-like”兩個字段,這個意思是說“English”和“C-like”這兩種寫法在wireshark中是等價的、都是可用的。
過濾值:
過濾值就是設定的過濾項應該滿足過濾關係的標準,比如500、5000、50000等等。過濾值的寫法一般已經被過濾項和過濾關係設定好了,只是填下自己的期望值就可以了。
對於兩條或以上的基本的顯示過濾表達式可以組成複合過濾表達式。
所謂複合過濾表達示,就是指由多條基本過濾表達式組合而成的表達示。基本過濾表達式的寫法還是不變的,複合過濾表達示多出來的東西就只是基本過濾表達示的“連接詞”,我們依然直接參照官方給出的表,同樣“English”和“C-like”這兩個字段還是說明這兩種寫法在wireshark中是等價的、都是可用的。
常見顯示過濾表達式:
顯示表達式 | 含義 |
tcp | 篩選tcp協議的數據包 |
!tcp | 篩選除tcp協議以外的數據包 |
tcp.port == 80 | 篩選端口爲80的數據包 |
tcp.port == 12345 && tcp.port == 80 | 篩選12345端口和80端口之間的數據包 |
tcp.srcport == 12345 && tcp.dstport == 80 | 篩選從12345端口到80端口的數據包 |
ip.addr == 192.168.1.1 | 篩選ip地址爲192.168.1.1的數據包 |
ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2 | 篩選192.168.1.1和192.168.1.2之間的數據包 |
http.request.method == GET | 篩選HTTP爲GET請求方式的數據包 |
ip.src ==192.168.1.102 | 篩選源地址爲192.168.1.102的數據包 |
http.request.uri matches ISAPI | 匹配http請求中含有ISAPI字段的請求信息 |
http | 篩選http協議的數據包 |
示例: 查看ip爲10.18.81.50的客戶端,向本地端口號爲88服務器發送的數據包
選中一條記錄選擇:追蹤流 -> TCP流
就可以查看其數據包了