wireshark抓包教程


 1、選擇要抓包的網絡

 

2、設置捕獲過濾器

  捕獲過濾器表達式作用在wireshark開始捕獲數據包之前,只捕獲符合條件的數據包,不記錄不符合條件的數據包。

  捕獲過濾器表達式沒有像顯示過濾器表達式那樣明顯的規律,但寫法不多所以也不難;而且除非全部捕獲要占用的磁盤空間實現太大,且你非常明確過濾掉的數據包是你不需要的,不然一般都不用捕獲過濾器表達式而用顯示過濾器表達式。

  在wireshark2.x版本,啟動后歡迎界面即有捕獲過濾器,在其中輸入過濾表達式開始捕獲數據包時即會生效。點擊圖中“書簽”標志,再點管理“捕獲篩選器”,即可看到常用捕獲過濾表達示的書寫形式。

 

 

3、顯示過濾器表達式及書寫規律

  3.1、基本過濾表達式

    一條基本的表達式由過濾項、過濾關系、過濾值三項組成。比如ip.addr == 192.168.1.1,這條表達式中ip.addr是過濾項、==是過濾關系,192.168.1.1是過濾值(整條表達示的意思是找出所有ip協議中源或目標ip、等於、192.168.1.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支持的全部協議及協議字段可查看官方說明。

  (2)過濾關系

  過濾關系就是大於、小於、等於等幾種等式關系,我們可以直接看官方給出的表。注意其中有“English”和“C-like”兩個字段,這個意思是說“English”和“C-like”這兩種寫法在wireshark中是等價的、都是可用的。

  (3)過濾值

  過濾值就是設定的過濾項應該滿足過濾關系的標准,比如500、5000、50000等等。過濾值的寫法一般已經被過濾項和過濾關系設定好了,只是填下自己的期望值就可以了。

  3.2、 復合過濾表達示

  所謂復合過濾表達示,就是指由多條基本過濾表達式組合而成的表達示。基本過濾表達式的寫法還是不變的,復合過濾表達示多出來的東西就只是基本過濾表達示的“連接詞”。

  我們依然直接參照官方給出的表,同樣“English”和“C-like”這兩個字段還是說明這兩種寫法在wireshark中是等價的、都是可用的。

  3.3 常見用顯示過濾需求及其對應表達式

  首先說幾個最常用的關鍵字,“eq” 和 “==”等同,可以使用 “and” 表示並且,“or”表示或者。“!" 和 "not” 都表示取反。

    3.3.1、針對wireshark最常用的自然是針對IP地址的過濾

  (1)對源地址為192.168.0.1的包的過濾,即抓取源地址滿足要求的包。

    表達式為:ip.src == 192.168.0.1

  (2)對目的地址為192.168.0.1的包的過濾,即抓取目的地址滿足要求的包。

    表達式為:ip.dst == 192.168.0.1

  (3)對源或者目的地址為192.168.0.1的包的過濾,即抓取滿足源或者目的地址的ip地址是192.168.0.1的包。

     表達式為:ip.addr == 192.168.0.1,或者 ip.src == 192.168.0.1 or ip.dst == 192.168.0.1

  (4)要排除以上的數據包,我們只需要將其用括號囊括,然后使用 "!" 即可。

    表達式為:!(表達式)

    3.3.2、針對協議的過濾

  (1)僅僅需要捕獲某種協議的數據包,表達式很簡單僅僅需要把協議的名字輸入即可。

    表達式為:http

  (2)需要捕獲多種協議的數據包,也只需對協議進行邏輯組合即可。

    表達式為:http or telnet (多種協議加上邏輯符號的組合即可)

  (3)排除某種協議的數據包

    表達式為:not arp !tcp

    3.3.3、針對端口的過濾(視協議而定)

  (1)捕獲某一端口的數據包

    表達式為:tcp.port == 80

  (2)捕獲多端口的數據包,可以使用and來連接,下面是捕獲高端口的表達式

    表達式為:udp.port >= 2048

    3.3.4、針對長度和內容的過濾

  (1)針對長度的過慮(這里的長度指定的是數據段的長度)

    表達式為:udp.length < 30 http.content_length <=20

  (2)針對數據包內容的過濾

    表達式為:http.request.uri matches "vipscu" (匹配http請求中含有vipscu字段的請求信息)

    3.3.5、針對不同的網絡層

  (1)數據鏈路層

    篩選mac地址為04:f9:38:ad:13:26的數據包----eth.src == 04:f9:38:ad:13:26

    篩選源mac地址為04:f9:38:ad:13:26的數據包----eth.src == 04:f9:38:ad:13:26

  (2)網絡層

    篩選ip地址為192.168.1.1的數據包----ip.addr == 192.168.1.1

    篩選192.168.1.0網段的數據---- ip contains "192.168.1"

    篩選192.168.1.1和192.168.1.2之間的數據包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2

    篩選從192.168.1.1到192.168.1.2的數據包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2

  (3)傳輸層

    篩選tcp協議的數據包----tcp

    篩選除tcp協議以外的數據包----!tcp

    篩選端口為80的數據包----tcp.port == 80

    篩選12345端口和80端口之間的數據包----tcp.port == 12345 && tcp.port == 80

    篩選從12345端口到80端口的數據包----tcp.srcport == 12345 && tcp.dstport == 80

  (4)應用層

    特別說明----http中http.request表示請求頭中的第一行(如GET index.jsp HTTP/1.1),http.response表示響應頭中的第一行(如HTTP/1.1 200 OK),其他頭部都用http.header_name形式。

    篩選url中包含.php的http數據包----http.request.uri contains ".php"

    篩選內容包含username的http數據包----http contains "username"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM