2012年5月7日 星期一

Linux 下觀查網路流量

在Linux 下想要觀查網路流量,一般來說會會跟你說是用MRTG來看
但mrtg要架起來到能看,需要很多道的手續,這幾天突發奇想,看看有沒有可以用Linux Script就可以解決的方法。

其實是有的 cat /proc/net/dev

當然~這不是給"人"看的....
這還需要作一些加工,可以把以下Script 存成執行的Bash Script
================================================

#!/bin/bash
#
# SCRIPT:
#
#
INTERFACE=$1
Interval=$2
if ( [[ $Interval == ""  ]] ) ;then
        #Default Interval Time
        Interval=5
fi

if ( [[ $INTERFACE != "" ]] ) ; then
        while [[ A == A ]]
        do
                INITTRR=`cat /proc/net/dev|grep $INTERFACE`
                INITTRR_RxBytes=`echo $INITTRR|awk '{print $1}'|awk -F":" '{print $2}'`
                INITTRR_RxPack=`echo $INITTRR|awk '{print $2}'`
                INITTRR_TxBytes=`echo $INITTRR|awk '{print $9}'`
                INITTRR_TxPack=`echo $INITTRR|awk '{print $10}'`

                sleep $Interval

                ENDTRR=`cat /proc/net/dev|grep $INTERFACE`
                ENDTRR_RxBytes=`echo $ENDTRR|awk -F" " '{print $1}'|awk -F":" '{print $2}'`
                ENDTRR_RxPack=`echo $ENDTRR|awk '{print $2}'`
                ENDTRR_TxBytes=`echo $ENDTRR|awk '{print $9}'`
                ENDTRR_TxPack=`echo $ENDTRR|awk '{print $10}'`

                RESULT_RxBytes=$((( $ENDTRR_RxBytes-$INITTRR_RxBytes ) /$Interval/1024 ))
                RESULT_RxPack=$(( $ENDTRR_RxPack-$INITTRR_RxPack ))
                RESULT_TxBytes=$((( $ENDTRR_TxBytes-$INITTRR_TxBytes ) /$Interval/1024 ))
                RESULT_TxPack=$(( $ENDTRR_TxPack-$INITTRR_TxPack ))

                echo -e "$INTERFACE `date +%H:%M:%S` \t RxBytes:$RESULT_RxBytes KB/s \t TxBytes:$RESULT_TxBytes KB/s \t RxPack:$RESULT_RxPack \t TxPack:$RESULT_TxPack \t"
        done
else
        echo "Ex. $0 interface Interval"
        echo "interface name:" `cat /proc/net/dev|grep :|awk -F":" '{print $1}'`
        echo "Interval:1-999 Sec,default 5 sec"
fi
================================================
這樣就可以看到主機的網路流量囉

沒有留言: