我們來監控一下伺服器的網絡吧

很多小夥伴都已經對Linux系統有了一定的瞭解,大家也都知道linux系統經常被用來做服務器系統。而對服務器網絡的監控是非常重要的。今天就帶大家來學習一下linux中的抓包方法。

linux抓包用到一個叫做tcpdump的軟件,紅帽的系統默認是安裝好該軟件的,直接使用tcpdump命令就可以了。

我們來監控一下服務器的網絡吧

先來學學基本的

讓我們來一起看一下最常用的命令:

tcpdump [-i 網卡] -nnAX '表達式'

-i用來指定抓包的網卡,-nn表示以ip+port的方式來顯示抓包內容,-A表示以ASCII的方式來顯示數據包的內容,-X表示用16進制的格式來顯示。後面的表達式呢,是用來對數據包進行篩選的,畢竟服務器數據那麼龐大,全抓下來也看不完的,篩選的依據可以是host,port,src host(源主機),dst host(目的主機)等等。(這裡大家要習慣於用域名去表示主機,而不是IP)

多說無益,直接上圖,先看最簡單的抓包

我們來監控一下服務器的網絡吧

這是將網卡中所有的數據包均抓取

我們來監控一下服務器的網絡吧

可以看到開始監視網卡,抓取的數據包會標明源目IP,端口,還有傳輸層的協議。

我們來監控一下服務器的網絡吧

可以看到有ARP的數據

我們來監控一下服務器的網絡吧

還有時間同步服務(NTP就是時間同步服務的服務名)

我們來監控一下服務器的網絡吧

還有熟悉的ICMP的數據包

我們來監控一下服務器的網絡吧

接下來是進階內容

可以用表達式來鎖定需要的數據包,比如說我現在只想要ICMP的包

我們來監控一下服務器的網絡吧

就可以只看到ICMP的數據包了

當然,如果你真的很強,對ip包頭,二進制運算比較熟悉可以試試比較複雜的表達式,比如說

我們來監控一下服務器的網絡吧

這裡的IP[2:2]表示的是IP數據包的長度,ip[2:2]>576指的是ip數據包長度大於576個字節的包(ps:注意這裡單位是字節,字節,字節),所以說,熟悉包格式的同學可以通過計算將包頭或者包內容篩選出來,進行控制。只有你想不到,沒有你做不到哦。

這裡的表達式是完全支持二進制運算的運算符的,比如說移位(>>,<

還有一個重點,在抓包結束之後,可以看到如下幾行字

我們來監控一下服務器的網絡吧

第一行是說應用層收到的數據包,第二行是對總的數據包進行了計數,第三行是被內核丟掉的數據包。正常情況下總的包的數量(第二行)是等於應用層收到的包(第一行)加內核丟棄的包的(第三行)。要注意的事情是,這裡的內核是tcpdump這個軟件的內核,也就是說數據沒有被處理就被丟掉了。丟包自然是不好的,所以說我們在抓包的時候,應該明確一下抓包的範圍,注意抓包的數據量,數據量過大就容易丟包。所以說這個命令的使用還是要注意一下抓包的量,儘量不要影響正常的數據傳輸。

我們來監控一下服務器的網絡吧

最後是比較實用的

當然這個命令還有很多實用的參數,比如說:

-t :不顯示時間戳

-c 數字 :抓取指定數量的數據包

-s 數字 :指定抓取時的抓取長度為多少,默認是65535,有的版本是68(單位同樣是字節,字節,字節)Ps:-s 0 表示抓取完整的數據包(即長度不受限制)

可能有的同學會表示看純命令行壓力有點大,沒有關係,我們還有手段,只要在命令後面加上 -w ./target.cap 就可以將抓包結果保存為.cap類型的文件(別告訴我你不認識,這是wireshark的文件格式),就可以在Windows系統中用wireshark來圖形化分析了。

寫在最後:tcpdump的功能是非常強大的,特別有興趣的同學可以通過man手冊來查詢命令使用方式,同時也歡迎同學們來找我們討論linux的問題。


分享到:


相關文章: