La tua applicazione sta probabilmente inviando pacchetti a un numero di porta UDP o TCP specifico o a un indirizzo IP specifico.
È quindi possibile utilizzare qualcosa come TCPdump per acquisire quel traffico.
TCPdump non ti fornisce le statistiche in tempo reale che desideri, ma puoi alimentare l'output in qualcosa che lo fa (proverò ad aggiornare questa risposta con una risposta in seguito).
Aggiornare:
$ sudo tcpdump -i eth1 -l -e -n | ./netbps
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:36:53 2143.33 Bps
11:37:03 1995.99 Bps
11:37:13 2008.35 Bps
11:37:23 1999.97 Bps
11:37:33 2083.32 Bps
131 packets captured
131 packets received by filter
0 packets dropped by kernel
L'ho interrotto dopo un minuto premendo Ctrl + C.
Dovresti aggiungere un'espressione di filtro adatta alla fine del tcpdump
comando per includere solo il traffico generato dalla tua app (ad es. port 123
)
Il programma netbps
è questo:
#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes;
my $reporting_interval = 10.0; # seconds
my $bytes_this_interval = 0;
my $start_time = [Time::HiRes::gettimeofday()];
STDOUT->autoflush(1);
while (<>) {
if (/ length (\d+):/) {
$bytes_this_interval += $1;
my $elapsed_seconds = Time::HiRes::tv_interval($start_time);
if ($elapsed_seconds > $reporting_interval) {
my $bps = $bytes_this_interval / $elapsed_seconds;
printf "%02d:%02d:%02d %10.2f Bps\n", (localtime())[2,1,0],$bps;
$start_time = [Time::HiRes::gettimeofday()];
$bytes_this_interval = 0;
}
}
}
È solo un esempio, aggiusta il gusto.