리눅스 트래픽 사용량 출력하기

 

아래는 리눅스에서 동작하는 트래픽 사용량을 초단위로 출력하는 perl 프로그램 소스입니다. 소스에서 eth0 만 검사하게 되어 있으므로 다른 디바이스를 점검하고 싶으시면 관련된 부분을 수정해 주셔야 합니다.


 


=======================================================================================================================


#!/usr/bin/perl


 


use strict;


my $iPeriod = 1;
my $strDevice = "eth0";


 


# 32bit 뺄셈
sub Minus32bit()
{
 my ( $iFirst, $iSecond ) = @_;
 my $iResult;
 
 if( $iFirst >= $iSecond )
 {
  $iResult = $iFirst - $iSecond;
 }
 else
 {
  $iResult = ( 4294967296 - $iFirst ) + $iSecond;
 }
 
 return $iResult;
}


 


# 전역변수
my $bIsFirst = 1;
my ( $iRecvBytes, $iRecvPackets, $iSendBytes, $iSendPackets );
my ( $iOldRecvBytes, $iOldRecvPackets, $iOldSendBytes, $iOldSendPackets );
my ( $iRecvBps, $iRecvPps, $iSendBps, $iSendPps );
my @arrSplit = ();
my @arrList = ();
my @arrTime;
my $strText;


while(1)
{
 @arrTime = localtime(time);
 open(FILE,"/proc/net/dev") or die "/proc/net/dev open error: $!";
 while(<FILE>)
 {
  next if( !($_ =~ $strDevice) );
  
  @arrSplit = split( /:/, $_ );
  $arrSplit[1] =~ s/^\s*(.*?)\s*$/$1/;
  @arrList = split( /\s+/, $arrSplit[1] );


  if( $bIsFirst == 1 )
  {
   $iOldRecvBytes = $arrList[0];
   $iOldRecvPackets = $arrList[1];
   $iOldSendBytes = $arrList[8];
   $iOldSendPackets = $arrList[9];
   $bIsFirst = 0;
   last;
  }


 


    $iRecvBytes = &Minus32bit( $arrList[0], $iOldRecvBytes );
    $iRecvPackets = &Minus32bit( $arrList[1], $iOldRecvPackets );
    $iSendBytes = &Minus32bit( $arrList[8], $iOldSendBytes );
    $iSendPackets = &Minus32bit( $arrList[9], $iOldSendPackets );


    $iOldRecvBytes = $arrList[0];
    $iOldRecvPackets = $arrList[1];
    $iOldSendBytes = $arrList[8];
    $iOldSendPackets = $arrList[9];
   
    $iRecvBps = ( $iRecvBytes * 8 ) / $iPeriod;
    $iRecvPps = $iRecvPackets / $iPeriod;
    $iSendBps = ( $iSendBytes * 8 ) / $iPeriod;
    $iSendPps = $iSendPackets / $iPeriod;


  $strText = sprintf( "%04d-%02d-%02d %02d:%02d:%02d [in] %9d bps %6d pps [out] %9d bps %6d pps\n"
   , $arrTime[5] + 1900, $arrTime[4] + 1, $arrTime[3]
   , $arrTime[2], $arrTime[1], $arrTime[0]
   , $iRecvBps, $iRecvPps, $iSendBps, $iSendPps );
  print "$strText";


  last;
 }
 close(FILE);
 sleep(1);
}