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.
vnstat -tr
Verwendung wie unten aus demselben Ordner:
So überprüfen Sie den Packer pro Schnittstelle:
./netpps.sh eth0
So überprüfen Sie die Geschwindigkeit pro Schnittstelle:
./netspeed.sh eth0
Messen Sie Pakete pro Sekunde auf einem Interface netpps.sh als Dateinamen
Messen Sie die Netzwerkbandbreite auf einer Schnittstelle netspeed.sh als Dateinamen
Weitere Informationen finden Sie auf dieser Website unter http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html
quelle
Am einfachsten zu verwenden und am einfachsten zu steuern, um die Ausgabe zu steuern und zur fortlaufenden Protokollierung in eine Datei umzuleiten:
Kommt wahrscheinlich mit den meisten Linux-Distributionen und kann mit Brew auf dem Mac installiert werden
quelle
Ich denke, Sie können die Proc-Schnittstelle verwenden, um die Informationen zu erhalten, die Sie benötigen. Ich habe dieses kleine Shell-Skript namens rt_traf.sh erstellt:
Dadurch werden die durch einen Tabulator getrennten In- und Out-Oktetts gedruckt. Oktette multipliziert mit 8 ergeben Bits / Sekunde und dividiert durch 10 ^ 6 ergeben Megabits / Sekunde. Natürlich können Sie dies dem Shell-Skript hinzufügen, um die Ausgabe nach Ihren Wünschen zu formatieren. Sie können dies mit der PID Ihrer Anwendung wie
./rt_traf.sh <PID>
folgt aufrufen, um eine sofortige Anzeige Ihrer Anwendung seit dem Start zu erhalten. Um Echtzeit-Statistiken pro Sekunde zu sehen, können Sie das Shell-Skript in den Befehl watch einbinden:Der
-n
Parameter kann auf Zehntelsekunden genau eingestellt werden. Um eine Berechnung über einen längeren Zeitraum durchzuführen, würde ich Folgendes tun:Wieder kann die Mathematik für die Größe / Zeiten angepasst werden, die Sie benötigen. Nicht die eleganteste oder in Schrumpffolie verpackte Lösung, sollte aber im Notfall funktionieren.
quelle
/proc/<pid>/net/netstat
Gibt dieselben Daten zurück wie zproc/net/netstat
. Sie erhalten für alle Prozesse die gleichen Daten.Ich musste nur messen, wie viel MySQL-Datenverkehr auf einem alten System ein- und ausgeht, auf dem Perl nicht ordnungsgemäß funktioniert hat. Daher konnte ich nicht widerstehen, einige Zeilen awk zu schreiben, die dem gleichen Ziel dienen, den Gesamtdatenverkehr von tcpdump zu messen:
Und wenn Sie Einzeiler besser mögen, ist hier einer für Sie:
quelle
else
Anweisung sollte entfernt werden, da sonst Zeilen übersprungen werden undsum
nicht korrekt sind.tcpdump -l -e -n port 3306 | awk '{t=substr($1,0,8);n=substr($9,0,length($9)-1);if(t!=pt){print t,sum;sum=0;};sum+=n;pt=t;}
Pro Anwendung kann mit einer Firewall-Regel unter Verwendung von xtables und einer Modifikation der folgenden Regeln gearbeitet werden.
Dies beantwortet nicht die Frage "pro Anwendung", sondern nur die Frage "pro Schnittstelle".
Unten finden Sie ein Skript, das auf den meisten eingebetteten Linux-Routern wie Ubiquiti und OpenWRT funktioniert und dessen Details aus / proc / net / dev abgerufen werden.
(Und leicht zu Paketen usw. zu ändern)
Kopieren Sie das Obige in Ihre Zwischenablage und dann in einer Terminalsitzung auf Ihrem Router:
dann: Strg + V (oder Rechtsklick / Einfügen)
dann: Strg + D
Sie können es auch in einen Notizblock einfügen und dann den obigen Vorgang wiederholen, wenn Sie es bearbeiten müssen - nicht alle eingebetteten Router verfügen über einen Editor! Stellen Sie sicher, dass Sie alles von der # oben auf die fertig kopieren; unten.
Das obige netpps-Beispiel ist übrigens großartig - aber nicht alle Geräte haben ein eingehängtes / sys-Dateisystem. Möglicherweise müssen Sie auch / bin / bash in / bin / sh ändern oder umgekehrt.
Quelle: https://gist.github.com/dagelf/ab2bad26ce96fa8d79b0834cd8cab549
quelle