Su aplicación probablemente esté enviando paquetes a un número de puerto UDP o TCP específico o a una dirección IP específica.
Por lo tanto, puede usar algo como TCPdump para capturar ese tráfico.
TCPdump no le brinda las estadísticas en tiempo real que desea, pero puede alimentar su salida a algo que sí lo haga (intentaré actualizar esta respuesta con una respuesta más adelante).
Actualizar:
$ 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
Lo interrumpí después de un minuto presionando Ctrl + C.
Debería agregar una expresión de filtro adecuada al final del tcpdump
comando para incluir solo el tráfico generado por su aplicación (por ejemplo port 123
)
El programa netbps
es este:
#!/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 solo un ejemplo, ajustarse al gusto.
vnstat -tr
Uso como abajo de la misma carpeta:
Para verificar el empaquetador por interfaz:
./netpps.sh eth0
Para verificar la velocidad por interfaz:
./netspeed.sh eth0
Medir paquetes por segundo en una interfaz netpps.sh como nombre de archivo
Mida el ancho de banda de red en una interfaz netspeed.sh como nombre de archivo
Consulte este sitio para obtener más información http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html
fuente
Más fácil de usar y más fácil de controlar la salida y redirigir al archivo para el registro continuo:
Probablemente viene con la mayoría de las distribuciones de Linux, y se puede instalar con brew en mac
fuente
Creo que puede usar la interfaz de proceso para obtener la información que necesita. Creé este pequeño script de shell llamado rt_traf.sh:
Esto imprimirá los octetos de entrada y salida separados por una pestaña. Los octetos multiplicados por 8 te darán bits / segundo y luego divididos entre 10 ^ 6 te darán megabits / segundo. Por supuesto, puede agregar esto al script de shell para formatear la salida como desee. Puede llamar a esto con el PID de su aplicación, lo
./rt_traf.sh <PID>
que le dará una lectura instantánea de su aplicación desde el inicio. Para ver estadísticas en tiempo real por segundo, puede ajustar el script de shell en el comando watch:El
-n
parámetro se puede ajustar hasta décimas de segundo. Para hacer un cálculo a lo largo del tiempo, haría algo como esto:Una vez más, las matemáticas se pueden ajustar para el tamaño / veces que necesita. No es la solución más elegante o envuelta por contracción, pero debería funcionar en un apuro.
fuente
/proc/<pid>/net/netstat
devuelve los mismos datos queproc/net/netstat
, es decir. obtienes los mismos datos para cualquiera / todos los procesos.Solo necesitaba medir cuánto tráfico mysql entra y sale en un sistema antiguo donde Perl no funcionaba correctamente, por lo que no pude resistirme a escribir algunas líneas de awk que sirvan para el mismo objetivo de medir el tráfico total visto por tcpdump:
Y si te gustan más las frases sencillas, aquí tienes una:
fuente
else
declaración debe eliminarse; de lo contrario, se omitirán las líneas ysum
no serán precisas.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;}
Por aplicación se puede hacer con una regla de firewall usando xtables y una modificación de lo siguiente.
Esto no responde la pregunta "por aplicación" sino solo la pregunta "por interfaz".
A continuación se muestra un script que funciona en la mayoría de los enrutadores Linux integrados, como Ubiquiti y OpenWRT, y obtiene sus detalles de / proc / net / dev.
(Y fácil de cambiar a paquetes, etc.)
Copie lo anterior en su portapapeles y luego en una sesión de terminal en su enrutador:
luego: Ctrl + V (o clic derecho / Pegar)
entonces: Ctrl + D
También puede pegarlo en un bloc de notas, luego repita lo anterior si necesita editarlo: ¡no todos los enrutadores integrados tienen un editor! Asegúrese de copiar todo, desde el # en la parte superior hasta el hecho; en el fondo.
El ejemplo de netpps anterior es genial, por cierto, pero no todos los dispositivos tienen un sistema de archivos montado / sys. También es posible que deba cambiar / bin / bash a / bin / sh o viceversa.
Fuente: https://gist.github.com/dagelf/ab2bad26ce96fa8d79b0834cd8cab549
fuente