Ứng dụng của bạn có thể đang gửi các gói đến một số cổng UDP hoặc TCP cụ thể hoặc đến một địa chỉ IP cụ thể.
Do đó, bạn có thể sử dụng một cái gì đó như TCPdump để nắm bắt lưu lượng đó.
TCPdump không cung cấp cho bạn các số liệu thống kê theo thời gian thực mà bạn mong muốn nhưng bạn có thể cung cấp kết quả đầu ra cho thứ gì đó (tôi sẽ cố gắng cập nhật câu trả lời này bằng câu trả lời sau).
Cập nhật:
$ 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
Tôi đã ngắt nó sau một phút bằng cách nhấn Ctrl + C.
Bạn cần thêm một biểu thức lọc phù hợp ở cuối tcpdump
lệnh để chỉ bao gồm lưu lượng truy cập được tạo bởi ứng dụng của bạn (ví dụ port 123
)
Chương trình netbps
này là:
#!/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;
}
}
}
Đó chỉ là một ví dụ, điều chỉnh theo sở thích.