Uygulamanız muhtemelen belirli bir UDP veya TCP bağlantı noktası numarasına veya belirli bir IP adresine paket gönderiyor.
Bu nedenle, bu trafiği yakalamak için TCPdump gibi bir şey kullanabilirsiniz.
TCPdump size istediğiniz gerçek zamanlı istatistikleri vermez, ancak çıktısını yapan bir şeyle besleyebilirsiniz (bu cevabı daha sonra bir cevapla güncellemeye çalışacağım).
Güncelleme:
$ 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
Bir dakika sonra Ctrl + C tuşlarına basarak bunu kestim.
tcpdump
Yalnızca uygulamanız tarafından oluşturulan trafiği dahil etmek için komutun sonuna uygun bir filtre ifadesi eklemeniz gerekir (ör. port 123
)
Program netbps
şudur:
#!/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;
}
}
}
Bu sadece bir örnek, zevkinize göre ayarlayın.