Perl Netstat Super Extractor

por | 11 enero, 2012

A continuación se muestra una pequeña rutina en Perl para extraer el volumen de tráfico que gestiona un interfaz de red en tiempo real.

#!/usr/bin/perl

use warnings;
use strict;

my $if;
my $method;
my $theline;

my $indataA;
my $outdataA;
my $indata_acuA=0;
my $outdata_acuA=0;
my $indata_mediaA;
my $outdata_mediaA;
my $indata_lastA;
my $outdata_lastA;
my $iterA=0;
my $initA=1;

my $indataB;
my $outdataB;
my $indata_acuB=0;
my $outdata_acuB=0;
my $indata_mediaB;
my $outdata_mediaB;
my $indata_lastB;
my $outdata_lastB;
my $iterB=0;
my $initB=1;

if ($#ARGV == 1){
 $if = $ARGV[0];
 $method = $ARGV[1];

 while(1)
 {
 if ($method eq "B")
 {
 $theline=`/sbin/ifconfig $if | grep "RX bytes"`;
 if ($theline =~ m/^\s+RX bytes:(\d+)\s+\(.*\)\s+TX bytes:(\d+)\s+\(.*\)$/)
 {
 if ($initB == 0)
 {
 $indataB = $1 - $indata_lastB; 
 $outdataB = $2 - $outdata_lastB;
 $indata_acuB = $indata_acuB + $indataB;
 $outdata_acuB = $outdata_acuB + $outdataB;
 $indata_mediaB = $indata_acuB / $iterB;
 $outdata_mediaB = $outdata_acuB / $iterB;
 $indata_lastB = $1;
 $outdata_lastB = $2;

 print "RX Bytes: $indata_mediaB --- TX Bytes: $outdata_mediaB\n";
 }
 else
 {
 $indata_lastB = $1;
 $outdata_lastB = $2;
 }
 $iterB = $iterB + 1;
 $initB = 0;
 }
 sleep(1);
 }
 elsif($method eq "P")
 {
 $theline=`netstat -i | grep $if`;
 if ($theline =~ m/^$if\s+\d+\s+\d+\s+(\d+)\s+\d+\s+\d+\s+\d+\s+(\d+)\s+\d+\s+\d+\s+\d+\s+.*$/)
 {
 if ($initA == 0)
 {
 $indataA = $1 - $indata_lastA; 
 $outdataA = $2 - $outdata_lastA;
 $indata_acuA = $indata_acuA + $indataA;
 $outdata_acuA = $outdata_acuA + $outdataA;
 $indata_mediaA = $indata_acuA / $iterA;
 $outdata_mediaA = $outdata_acuA / $iterA;
 $indata_lastA = $1;
 $outdata_lastA = $2;

 print "RX Packets: $indata_mediaA --- TX Packets: $outdata_mediaA\n";
 }
 else
 {
 $indata_lastA = $1;
 $outdata_lastA= $2;
 }
 $iterA = $iterA + 1;
 $initA = 0;
 }
 sleep(1);
 }
 }
}
else
{
 print "Bad number of arguments!!!!, .... you need the INTERFACE and the METHOD (B or P)\n" 
}

 

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *