WireShark(三)


wireshark過濾抓包與過濾查看

在分析網絡數據和判斷網絡故障問題中,都離不開網絡協議分析軟件(或叫網絡嗅探器、抓包軟件等等)這個“利器”,通過網絡協議分析軟件我們可以捕獲網絡中正常傳輸哪些數據包,通過分析這些數據包,我們就可以准確地判斷網絡故障環節出在哪。網絡協議分析軟件眾多,比如ethereal(wireshark的前身),wireshark,omnipeek,sniffer,科來網絡分析儀(被譽為國產版sniffer,符合我們的使用習慣)等等,本人水平有限,都是初步玩玩而已,先談談個人對這幾款軟件使用感受,wireshark(ethereal)在對數據包的解碼上,可以說是相當的專業,能夠深入到協議的細節上,用它們來對數據包深入分析相當不錯,更重要的是它們還是免費得,但是用wireshark(ethereal)來分析大量數據包並在大量數據包中快速判斷問題所在,比較費時間,不能直觀的反應出來,而且操作較為復雜。像omnipeek,sniffer,科來網絡分析儀這些軟件是專業級網絡分析軟件,不僅僅能解碼(不過有些解碼還是沒有wireshark專業),還能直觀形象的反應出數據情況,這些軟件會對數據包進行統計,並生成各種各樣的報表日志,便於我們查看和分析,能直觀的看到問題所在,但這類軟件是收費,如果想感受這類專業級的軟件,我推薦玩科來網絡分析儀技術交流版,免費注冊激活,但是只能對50個點進行分析。廢話不多說,下面介紹幾個wireshark使用小技巧,說的不好,還請各位多指點批評。


目前wireshark最新版本是1.7的,先簡單對比下wireshark的1.6和1.7版本。


下面是wireshark的1.6版本的界面圖:




點擊圖中那個按鈕,進入抓包網卡選擇,然后點擊option進入抓包條件設置,就會打開如下圖的對話框。




如果想抓無線網卡的數據吧,就把圖中那個勾去掉,不然會報錯。點擊Capture Filter進入過濾抓包設置(也可以在這個按鈕旁邊,那個白色框直接寫過濾語法,語法不完成或無法錯誤,會變成粉紅色的框,正確完整的會變成淺綠色),Filter name是過濾條件命名,Filter string 是過濾的語法定義,設置好了,點擊new會把你設置好的加入到過濾條件區域,下次要用的時候,直接選者你定義這個過濾條件名。


下面是wireshark的1.7版本的界面圖:




界面有所變化,同樣是點擊option進入過濾編輯,如下圖:




如果,左邊的雙擊左邊網卡可以直接進入過濾抓包設置對話框,中間是點擊option后進入的對話框,再雙擊網卡進入下面的過濾抓包設置對話框,后面就跟wireshark的1.6版本一樣了。


下面聊聊過濾抓包語法,Filter string中怎么寫語法。大家可以看看capture Filter原來已有的怎么定義的。




要弄清楚並設置好這個過濾條件的設置,得弄清楚TCP/IP模型中每層協議原理,以及數據包結構中每個比特的意思。上面這是抓得ARP,在數據鏈路層來看的,ARP是上層協議,在ethernet包結構表示的協議類型代碼是 0x0806,如果站在網絡層來說(ARP協議有時又稱為2.5層的協議,靠近數據鏈路層),我們的過濾語法可以這樣寫:




這兩個是等價的,抓得都是ARP包。或許有的朋友這里不太明白,建議去看《TCP/IP協議族》《TCP/IP協議詳卷》等等原來書籍,先理解數據包結構。從這個設置來看,可以看出wireshark的過濾抓包多么深入了。


現在我簡單講講過濾抓包語法以及怎樣設置想要的過濾抓包語法(Filter string該填寫什么東西)。


組合過濾語法常使用的連接:


過濾語法1 and 過濾語法2 只有同時滿足語法12數據才會被捕獲


過濾語法1 or 過濾語法2 只有滿足語法1或者2任何一個都會被捕獲


not 過濾語法 除該語法外的所有數據包都捕獲




常用的過濾語法說明:


ether host D0F:9A:87:57:9E 定義捕獲MAC為D0F:9A:87:57:9E的數據包,不管這個MAC地址是目標MAC還是源MAC,都捕獲這個數據包


ether proto 0x0806 定義了所有數據包中只要ethernet協議類型是0x0806的數據包進行捕獲。




如果我們用and來組合這兩個語法:


ether host D0F:9A:87:57:9E and ether proto 0x0806(該語法等價於ether host D0F:9A:87:57:9E and arp)


表示我們只針對MAC為D0F:9A:87:57:9E的ARP包進行捕獲。




arp 該語法只捕獲所有的arp數據包


ip 該語法只捕獲數據包中有IP頭部的包。(這個語法可以用 ether proto 0x0800,因為ethernet協議中得0x0800表示ip)


host 192.168.1.1 該語法只捕獲IP頭部中只要有192.168.1.1這個地址的數據,不管它是源IP地址還是目標IP地址。




tcp 該語法只捕獲所有是tcp的數據包


tcp port 23 該語法只捕獲tcp端口號是23的數據包,不管源端口還是目標端口。




udp 該語法只捕獲所有是udp的數據包


udp port 53 該語法只捕獲udp端口號是23的數據包,不管源端口還是目標端口。


port 68 該語法只捕獲端口為68的數據,不管是TCP還是UDP,不管該端口號是源端口,還是目標端口。




以上是常用的過濾抓包語法,靈活組合,就可以定位抓包。下面簡單舉幾個例子。

這是個Radius 的過濾抓包,如果不清楚它是 TCP 還是 UDP ,可以使用語法 port 1645 or port 1646 來定義。

這個過濾抓包語法的設置是,IP地址為172.16.1.102的除了TCP協議不捕獲外,其他所有數據都捕獲。


以上就是過濾抓包的語法簡單說明和介紹,最后如下操作就可抓包了。




設置好就點擊new,那么過濾抓包的名字就會加入進去,下次只有選擇名字就可以直接抓了,點擊ok之后,語法對的話,就會呈現淺綠色,語法不完整或錯誤就是粉紅色,按下start就可以捕獲自己想要的數據包了。


接下來,介紹下wireshark的過濾查看的數據包,在面對大量數據包,我們怎么快速鎖定查找自己想要的數據包。Wireshark的過濾抓包查看語法深入包的細節了,草草看了至少有上百條語法。要很好的理解和運用這些語法,TCP/IP協議原理得清楚。有興趣的朋友可以如下圖深入查看過濾查看使用的語法。




下面我只簡單介紹幾個常用:


eth.addr eq 00:08:d2:00:09:10 查找MAC等於00:08:d2:00:09:10的數據包,不過源MAC還是目標MAC


eth.src eq 00:08:d2:00:09:10 查找源MAC地址為00:08:d2:00:09:10的數據包


eth.dst eq 00:08:d2:00:09:10 查找源MAC地址為00:08:d2:00:09:10的數據包


eth.type eq 0x0806 查找ethernet協議類型為0x0806(ARP包)的數據包


ip.addr eq 10.1.1.2 查找IP地址為10.1.1.2的數據包


tcp.dstport eq 80 查找TCP目標端口為80的數據包


tcp.srcport eq 80 查找TCP源端口為80的數據包


udp.srcport eq 53 查找UDP源端口為53的數據包


udp.dstport eq 53 查找UDP目標端口為53的數據包


ip.addr eq 10.1.1.2 and udp.srcport eq 53 定位查看IP地址為10.1.1.2,UDP源端口為53的數據包。


下面是演示圖:




輸入查看語法后,回車,wireshark查找數據,看數據包的大小決定查找時間,我抓了個300多M的包,過濾查找想要的包花了3分鍾。




正在查找包

過濾查找出了自己想要的包了,


使用wireshark時,通過精確定位過濾捕獲自己想要的包,這樣捕獲的包比較直觀,而且捕獲的包又小。回想起自己曾在核心上抓包,大量數據包對筆記本網卡的沖擊太大了,造成筆記本死機,而且在幾十萬個包里,很難直觀看到自己想要的包,對其進行分析,在這樣的大的包使用過濾定位查看,也比較耗時間。有時候需要捕獲大量的包分析流量,建議還是使用sniffer,科來這類更加專業級網絡分析軟件。

相關文檔:http://www.clxp.net.cn/article.asp?id=2288


免責聲明!

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



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