Twoja aplikacja prawdopodobnie wysyła pakiety na określony numer portu UDP lub TCP lub na określony adres IP.
Dlatego możesz użyć czegoś takiego jak TCPdump do przechwytywania tego ruchu.
TCPdump nie daje ci statystyk w czasie rzeczywistym, których pragniesz, ale możesz podać dane wyjściowe do czegoś, co robi (postaram się zaktualizować tę odpowiedź odpowiedzią później).
Aktualizacja:
$ 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
Przerwałem to po minucie, naciskając Ctrl + C.
Trzeba dodać odpowiednie wyrażenie filtru na końcu tcpdump
polecenia, aby uwzględnić tylko ruch generowany przez aplikację (np. port 123
)
Program netbps
jest następujący:
#!/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;
}
}
}
To tylko przykład, dostosuj się do smaku.