Votre application envoie probablement des paquets à un numéro de port UDP ou TCP spécifique ou à une adresse IP spécifique.
Vous pouvez donc utiliser quelque chose comme TCPdump pour capturer ce trafic.
TCPdump ne vous donne pas les statistiques en temps réel que vous souhaitez mais vous pouvez alimenter sa sortie vers quelque chose qui le fait (j'essaierai de mettre à jour cette réponse avec une réponse plus tard).
Mise à jour :
$ 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
J'ai interrompu cela après une minute en appuyant sur Ctrl+C.
Vous devez ajouter une expression de filtrage appropriée à la fin de l'expression de filtrage. tcpdump
pour n'inclure que le trafic généré par votre application (ex. port 123
)
Le programme netbps
c'est ça :
#!/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;
}
}
}
Ce n'est qu'un exemple, ajustez selon vos goûts.