La tua applicazione sta probabilmente inviando pacchetti a un numero di porta UDP o TCP specifico o a un indirizzo IP specifico.
Puoi quindi usare qualcosa come TCPdump per catturare quel traffico.
TCPdump non ti fornisce le statistiche in tempo reale che desideri, ma puoi fornire il suo output a qualcosa che lo fa (cercherò di aggiornare questa risposta con una risposta più tardi).
Aggiornamento:
$ 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
L'ho interrotto dopo un minuto premendo Ctrl+C.
Dovresti aggiungere un'espressione di filtro adatta alla fine di tcpdump
comando per includere solo il traffico generato dalla tua app (ad es. port 123
)
Il programma netbps
è questo:
#!/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;
}
}
}
È solo un esempio, regolatevi a piacere.
Utilizzo come di seguito dalla stessa cartella:
Per controllare il packer per interfaccia:./netpps.sh eth0
Per controllare la velocità per interfaccia:./netspeed.sh eth0
Misura i pacchetti al secondo su un'interfaccia netpps.sh come nome file
#!/bin/bash
INTERVAL="1" # update interval in seconds
if [ -z "$1" ]; then
echo
echo usage: $0 [network-interface]
echo
echo e.g. $0 eth0
echo
echo shows packets-per-second
exit
fi
IF=$1
while true
do
R1=`cat /sys/class/net/$1/statistics/rx_packets`
T1=`cat /sys/class/net/$1/statistics/tx_packets`
sleep $INTERVAL
R2=`cat /sys/class/net/$1/statistics/rx_packets`
T2=`cat /sys/class/net/$1/statistics/tx_packets`
TXPPS=`expr $T2 - $T1`
RXPPS=`expr $R2 - $R1`
echo "TX $1: $TXPPS pkts/s RX $1: $RXPPS pkts/s"
done
Misura la larghezza di banda della rete su un'interfaccia netspeed.sh come nome file
#!/bin/bash
INTERVAL="1" # update interval in seconds
if [ -z "$1" ]; then
echo
echo usage: $0 [network-interface]
echo
echo e.g. $0 eth0
echo
exit
fi
IF=$1
while true
do
R1=`cat /sys/class/net/$1/statistics/rx_bytes`
T1=`cat /sys/class/net/$1/statistics/tx_bytes`
sleep $INTERVAL
R2=`cat /sys/class/net/$1/statistics/rx_bytes`
T2=`cat /sys/class/net/$1/statistics/tx_bytes`
TBPS=`expr $T2 - $T1`
RBPS=`expr $R2 - $R1`
TKBPS=`expr $TBPS / 1024`
RKBPS=`expr $RBPS / 1024`
echo "TX $1: $TKBPS kB/s RX $1: $RKBPS kB/s"
done
Per ulteriori informazioni, fare riferimento a questo sito http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html
Più facile da usare e più facile da controllare l'output e reindirizzare al file per la registrazione continua:
ifstat
Probabilmente viene fornito con la maggior parte delle distribuzioni Linux e può essere installato con brew su Mac