计算网卡流量

#!/bin/bash

if [ $# -ne 2 ];then
    echo -e "\e[1;31mUsage:\t\t./net.sh device time(second)\e[0m"
    echo -e "\e[1;31mExample:\t./net.sh eth0 2\e[0m"
    exit 1
fi
time=$2
old_in=$(awk -v dev=$1 '{if($0~dev)print $2}' /proc/net/dev)
old_out=$(awk -v dev=$1 '{if($0~dev)print $10}' /proc/net/dev)

while true
do
    sleep $time
    dev_in=$(awk -v dev=$1 '{if($0~dev)print $2}' /proc/net/dev)
    dev_out=$(awk -v dev=$1 '{if($0~dev)print $10}' /proc/net/dev)
    dif_in=$((((dev_in-old_in)/time/1000)*8))
    dif_out=$((((dev_out-old_out)/time/1000)*8))
    old_in=$dev_in
    old_out=$dev_out
    echo -e "\e[1;32mIn:$dif_in kb/s Out:$dif_out kb/s\e[0m"
done

 用perl写了个,可以输出所有网卡的流量,写的很糙,格式输出不好看

#!/usr/bin/perl -w
use strict;
my $dev_file = '/proc/net/dev';
my $time = 2;
if(!open ETH_DEV,'<',$dev_file) {die "Cannot open $dev_file\n";}

sub get_dev_info{
    my @dev_info;
    while(<ETH_DEV>){
        if(/[0-9]+/){
            chomp;
            my @line = split(/:/);
            my $dev = $line[0];
            @line = split(/\s+/,$line[1]);
            push@dev_info, ($dev,$line[1],$line[9]);
        }
    }
    seek(ETH_DEV,0,0);
    return @dev_info;
}
my @dev_info_old = get_dev_info;
while(1){
    sleep $time;
    my $i = 0;
    #my $dev_sum = 0;
    my @dev_info_new = get_dev_info;
    my @result;
    foreach  (@dev_info_new){
        $i++;
        if($i%3==1){
    #       $dev_sum++;
            my $diff_in = ($dev_info_new[$i]-$dev_info_old[$i])/$time;
            my $diff_out = ($dev_info_new[$i+1]-$dev_info_old[$i+1])/$time;
            push @result, ($_."\t","In: ".$diff_in."byte/s\t","Out: ".$diff_out."byte/s\t");
        }
    }
    @dev_info_old = @dev_info_new;
#   print "DEVICE\tIN\tOUT\t"x$dev_sum."\n";
    print "@result"."\n";
}
close ETH_DEV;

 

posted @ 2013-06-16 22:50  sunsweet  阅读(357)  评论(0编辑  收藏  举报