Un simple script en perl para calcular el throughput de un interfaz Linux. Recordemos que el throughput se entiende como la velocidad real de transporte del interfaz y siempre será menor que el ancho de banda (bandwidth) del interfaz.
Uso: # perl NetStat_Super_Extractor.pl [ethX] [B|P]
ethX: interfaz ethernet
B: resultados en bytes/seg.
P: resultados en paquetes/seg.
#!/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" }