Ihre Anwendung sendet wahrscheinlich Pakete an eine bestimmte UDP- oder TCP-Portnummer oder an eine bestimmte IP-Adresse.
Sie können daher so etwas wie TCPdump verwenden, um diesen Datenverkehr zu erfassen.
TCPdump gibt Ihnen nicht die Echtzeit-Statistiken, die Sie wünschen, aber Sie können die Ausgabe an eine Funktion weiterleiten, die dies tut (ich werde versuchen, diese Antwort später mit einer Antwort zu aktualisieren).
Aktualisieren:
$ 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
Ich unterbrach das nach einer Minute durch Drücken von Strg + C.
Sie müssen am Ende des tcpdump
Befehls einen geeigneten Filterausdruck hinzufügen, um nur den von Ihrer App generierten Datenverkehr zu berücksichtigen (z. B. port 123
).
Das Programm netbps
sieht so aus:
#!/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;
}
}
}
Es ist nur ein Beispiel, passen Sie sich dem Geschmack an.