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.
vnstat -tr
Użycie jak poniżej z tego samego folderu:
Aby sprawdzić program pakujący według interfejsu:
./netpps.sh eth0
Aby sprawdzić prędkość według interfejsu:
./netspeed.sh eth0
Zmierz liczbę pakietów na sekundę w interfejsie netpps.sh jako nazwę pliku
Zmierz przepustowość sieci na interfejsie netspeed.sh jako nazwę pliku
Proszę odnieść się do tej strony, aby uzyskać więcej informacji http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html
źródło
Najłatwiejszy w użyciu i najłatwiejszy do kontrolowania danych wyjściowych i przekierowywania do pliku w celu ciągłego logowania:
Prawdopodobnie pochodzi z większością dystrybucji Linuksa i może być zainstalowany wraz z brew na Macu
źródło
Myślę, że możesz użyć interfejsu proc, aby uzyskać potrzebne informacje. Stworzyłem ten mały skrypt powłoki o nazwie rt_traf.sh:
Spowoduje to wydrukowanie oktetów wejściowych i wyjściowych oddzielonych tabulatorami. Oktety pomnożone przez 8 dadzą Ci bity na sekundę, a następnie podzielone przez 10 ^ 6 dadzą Ci megabitów na sekundę. Oczywiście możesz dodać to do skryptu powłoki, aby sformatować dane wyjściowe tak, jak chcesz. Możesz to nazwać PID aplikacji w taki sposób,
./rt_traf.sh <PID>
który zapewni natychmiastowy odczyt aplikacji od momentu uruchomienia. Aby oglądać statystyki w czasie rzeczywistym na sekundę, możesz zawinąć skrypt powłoki w komendę watch:-n
Parametr może być regulowana przez całą drogę w dół do dziesiątych części sekundy. Aby wykonać obliczenia w czasie, zrobiłbym coś takiego:Ponownie matematyka może być dostosowana do potrzebnego rozmiaru / czasów. Nie jest to najbardziej eleganckie lub pakowane w folię termokurczliwą rozwiązanie, ale powinno działać w mgnieniu oka.
źródło
/proc/<pid>/net/netstat
zwraca te same dane, coproc/net/netstat
np. otrzymujesz te same dane dla dowolnego / wszystkich procesów.Musiałem tylko zmierzyć, ile ruchu mysql wchodzi i wychodzi na starym systemie, w którym perl nie działa poprawnie, więc nie mogłem się powstrzymać przed napisaniem kilku wierszy awk, które służą temu samemu celowi mierzenia całkowitego ruchu widzianego przez tcpdump:
A jeśli bardziej Ci się podoba jedna linijka, oto jedna dla Ciebie:
źródło
else
Oświadczenie powinno zostać usunięte inaczej linie zostaną pominięte isum
nie będą dokładne.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;}
Dla każdej aplikacji można wykonać regułę zapory ogniowej za pomocą xtables i modyfikacji poniższych.
To nie odpowiada na pytanie „na aplikację”, ale tylko na „na interfejs”.
Poniżej znajduje się skrypt, który działa na większości wbudowanych routerów Linux, takich jak Ubiquiti i kompatybilnych z OpenWRT, i pobiera jego szczegóły z / proc / net / dev.
(I łatwo zmienić na pakiety itp.)
Skopiuj powyższe do schowka, a następnie w sesji terminalu na routerze:
następnie: Ctrl + V (lub kliknij prawym przyciskiem myszy / Wklej)
następnie: Ctrl + D
Możesz także wkleić go do notatnika, a następnie powtórzyć powyższe, jeśli chcesz go edytować - nie wszystkie wbudowane routery mają edytor! Upewnij się, że skopiowałeś wszystko od # u góry po gotowe; na dnie.
Powyższy przykład netpps jest świetny BTW - ale nie wszystkie urządzenia mają zamontowany system plików / sys. Być może będziesz musiał zmienić / bin / bash na / bin / sh lub odwrotnie.
Źródło: https://gist.github.com/dagelf/ab2bad26ce96fa8d79b0834cd8cab549
źródło