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 désirez mais vous pouvez alimenter sa sortie à quelque chose qui 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 filtre appropriée à la fin de la tcpdump
commande pour inclure uniquement le trafic généré par votre application (par exemple port 123
)
Le programme netbps
est le suivant:
#!/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;
}
}
}
C'est juste un exemple, ajustez au goût.