linux下檢視當前網路流量

rainbowbridg發表於2011-12-31

cat /proc/net/dev 透過這個檔案可以看到網路流量

[@more@]檢視主機流量,ok,以KB為單位,一個nohup命令讓他跑這麼幾天, 取出來分析便是。

/proc/net/dev,就是分析狀態。

零、嘛是/proc/net/dev:

/proc的那些檔案的操作函式很特殊,不需要直接對/proc檔案的內容進行寫操作來新增內容,就能用充滿魔力的show函式來給使用者提供資訊。聽不懂,就當神話來聽,知道怎麼用這個東東就行。

# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo:1219485788609 620698175 0 0 0 0 0 0 1219485788609 620698175 0 0 0 0 0 0
eth0:182025224125 332789797 0 0 0 0 0 1946 226393677809 315770454 0 0 0 0 0 0
eth1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
tunl0:18186156911 209305063 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ok,你要用的就是第1,2,9,10列。

一、一般伺服器就一個網路卡,bash版的夠用了:

#! /bin/bash
while true
do
receive1=`cat /proc/net/dev|grep eth0 | awk '{print$1}'|sed -s 's/eth0://g'`
send1=`cat /proc/net/dev|grep eth0 | awk '{print$9}'`
sleep 300
receive2=`cat /proc/net/dev|grep eth0 | awk '{print$1}'|sed -s 's/eth0://g'`
receive_cnt=`expr $receive2 - $receive1`
receive_cnt=`expr $receive_cnt / 1024`
send2=`cat /proc/net/dev|grep eth0 | awk '{print$9}'`
send_cnt=`expr $send2 - $send1`
send_cnt=`expr $send_cnt / 1024`
echo `date` 'eth0 Receive Bytes:'$receive_cnt >>ok.txt
echo `date` 'eth0 Send Bytes:' $send_cnt >>ok.txt
done

二、如果你多網路卡,又想有個萬能指令碼,ok,老遊給你一個perl版本:

#!/usr/bin/perl
$count=0;
my $sec=60;
while(1){
my ($RX_bytes1,$TX_bytes1)=getnet();
sleep($sec);
my ($RX_bytes2,$TX_bytes2)=getnet();
my $net_RX_rate=int(($RX_bytes2-$RX_bytes1)/$sec);
my $net_TX_rate=int(($TX_bytes2-$TX_bytes1)/$sec);
my $net_rate=$net_RX_rate+$net_TX_rate;
my $localt=localtime();
$count++;
printlog("$countt$localtt$net_ratet$net_RX_ratet$net_TX_raten");
}
#-------------------------------------------------------------------------
sub getnet{
system("rm -fr net_use.tmp") if(-e "net_use.tmp");
system("cp /proc/net/dev net_use.tmp");
open(IN,"net_use.tmp")||die "$!";
my @array=;
close IN;
system("rm -fr net_use.tmp");
my ($RX_bytes,$TX_bytes)=(0,0);
foreach my $line(@array){
if($line=~/ethd+:(.+)/){
my $tmp=$1;
my @array2=split(/s+/,$tmp);
$RX_bytes+=$array2[0];
$TX_bytes+=$array2[8];
}
}
return ($RX_bytes,$TX_bytes);
}
#-------------------------------------------------------------------------
sub printlog{
my $str=shift;
open(LOGOUT,">>net_stat.log");
print LOGOUT "$str";
close LOGOUT;
}

ref: http://51runaway.blog.163.com/blog/static/240286882009102665632660/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7916042/viewspace-1057003/,如需轉載,請註明出處,否則將追究法律責任。

相關文章