Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

 bytetraf - continually display byte traffic on a network interface
Автор  Ext2 (08.11.2004 23:50) съобщение до автора
Погледнат  1667 пъти добави към любими
Оценка добави коментар
Гласове  -- изпрати на приятел
Коментари  (0) абонирай се за Shell
     
Ext2
     
 

#! /bin/bash
  1. #######################################

       NAME_="bytetraf"
    PURPOSE_="continually display byte traffic on a network interface"
   SYNOPSIS_="$NAME_ [-hml] <n>s|m|h|d <interface>"
   REQUIRES_="standard GNU commands, /proc fs"
    VERSION_="1.0"
       DATE_="2004-07-20; last update: 2004-07-22"
     AUTHOR_="Dawid Michalczyk <dm@eonworks.com>;"
        URL_="www.comp.eonworks.com"
   CATEGORY_="net"
   PLATFORM_="Linux"
      SHELL_="bash"
 DISTRIBUTE_="yes"

  1. ############################################
  2. This program is distributed under the terms of the GNU General Public License

usage () {

echo >&2 "$NAME_ $VERSION_ - $PURPOSE_
Usage: $SYNOPSIS_
Requires: $REQUIRES_
Options:
     <n>s|m|h|d, n is an integer referring to time interval in
                 seconds|minutes|hours|days which refers to the frequency of how
                 often to display traffic info
     <interface>, is the name of network interface as found in /proc/net/dev file
     -h, usage and options (this help)
     -m, manual
     -l, see this script"
    exit 2
}

manual() { echo >&2 "

NAME

    $NAME_ $VERSION_ - $PURPOSE_

SYNOPSIS

    $SYNOPSIS_

DESCRIPTION

    Output format example:
 
    13:53:21 int: ppp0 recv: [+6270] 5.789.621  tran: [+393] 537.478  rate: 6663 b/s

    Output explanation for each column:

    13:53:21 - time
    int: - short for interface
    ppp0 - interface type
    recv: - marks received bytes start
    [+6270] - received 6270 bytes since last time interval specified as <n>s|m|h|d
    5.789.621 - received 5.789.621 bytes since the interface has been up
    tran: - marks transferred bytes start
    [+393] - transferred 393 bytes since last time interval specified as <n>s|m|h|d
    537.478 - transferred 537.478 bytes since the interface has been up
    rate: - speed in bytes/s of the total traffic
    6663 b/s - 6663 bytes/s

NOTE

    This script relies on the structure of the output generated by kernels 2.2.x and
    2.4.x in /proc/net/dev file.

"; exit 2; }

  1. define net interface
interface=$2

  1. local funcs
byte_count() {

    while read line;do

        if [[ $line == ${interface}:* ]];then
             [[ $1 == r ]] && { set -- ${line#*:}; echo $1; }
             [[ $1 == t ]] && { set -- ${line#*:}; echo $9; }
        fi

    done < /proc/net/dev
}

string_intDelim () {
    echo $1 | sed '{ s/$/@/; : loop; s/(...)@/@.1/; t loop; s/@//; s/^.//; }'
 }

interface_check() {
    grep $interface /proc/net/dev &>/dev/null
    [ $? != 0 ] && { echo $interface is not up, cant find it in /proc/net/dev; exit 1; }
}

  1. args check
[ $# -eq 0 ] && { echo >&2 missing argument, type $NAME_ -h for help; exit 2; }

  1. enabling extended globbing
shopt -s extglob

  1. arg handling and execution
case $1 in

    -h) usage ;;
    -m) manual ;;
    -l) more $0; exit 2 ;;
    +([0-9])[smhd] ) # main execution

        [ $2 ] || { echo missing second argument, type $NAME_ -h for help; exit 2; }
        interface_check

        intg=${1%[s|m|h|d]*}
        unit=${1##*[!s|m|h|d]}

        [[ $unit == s ]] && div=1
        [[ $unit == m ]] && div=60
        [[ $unit == h ]] && div=3600
        [[ $unit == d ]] && div=86400

        while grep ppp0 < /proc/net/dev &>/dev/null ;do
             
            received=$(byte_count r)
            transmit=$(byte_count t)
            sleep $1 # time interval for how often to grab data from /proc/net/dev
            nreceived=$(byte_count r)
            ntransmit=$(byte_count t)
            rdiff=$((( $nreceived - $received )))
            tdiff=$((( $ntransmit - $transmit )))
            rate=$((( ($rdiff + $tdiff) / ( $div * $intg ) )))
            echo "$(date +%H:%M:%S) int: $interface  recv: [+${rdiff}] $(string_intDelim $received)  tran: [+${tdiff}] $(string_intDelim $transmit)  rate: ${rate} b/s"

        done ;;
   
    *) echo invalid or missing argument, type $NAME_ -h for help ; exit 2 ;;
esac



Ключови думи: shell shell script bin bash bytetraf continually display network interface




 1 посетител чете този скрипт (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 
  • Интересно от myLINKS
 
 
 
 



IT-PLACE.NET © 2004 - 2008