【實用技巧】wireshark過濾抓包與過濾查看

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

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

下面是wireshark的1.6版本的界面圖:(看不清圖,請點擊放大)tcp

 

 點擊圖中那個按鈕,進入抓包網卡選擇,而後點擊option進入抓包條件設置,就會打開以下圖的對話框ide

 

 

 

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

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

界面有所變化,一樣是點擊option進入過濾編輯,以下圖:日誌

若是,左邊的雙擊左邊網卡能夠直接進入過濾抓包設置對話框,中間是點擊option後進入的對話框,再雙擊網卡進入下面的過濾抓包設置對話框,後面就跟wireshark的1.6版本同樣了。 orm

下面聊聊過濾抓包語法,Filter string中怎麼寫語法。你們能夠看看capture Filter原來已有的怎麼定義的。blog

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

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

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

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

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

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

not 過濾語法               除該語法外的全部數據包都捕獲

經常使用的過濾語法說明:

ether host D0:DF:9A:87:57:9E  定義捕獲MAC爲D0:DF:9A:87:57:9E的數據包,無論這個MAC地址是目標MAC仍是源MAC,都捕獲這個數據包

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

若是咱們用and來組合這兩個語法:

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

表示咱們只針對MAC爲D0:DF: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,科來這類更加專業級網絡分析軟件。