Last active
February 2, 2024 07:33
-
-
Save palashkulsh/897c3d2eb994a04c5069d8ef7c55ecd9 to your computer and use it in GitHub Desktop.
how to check network bandwidth usage of a port via tcpdump
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# documented in https://superuser.com/questions/356907/how-to-get-real-time-network-statistics-in-linux-with-kb-mb-bytes-format-and-for | |
Your application is probably sending packets to a specific UDP or TCP port number or to a specific IP-address. | |
You can therefore use something like TCPdump to capture that traffic. | |
TCPdump doesn't give you the real-time stats you desire but you can feed it's output to something that does (I'll try to update this answer with an answer later). | |
Update: | |
$ 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 | |
I interrupted that after a minute by pressing Ctrl+C. | |
You'd need to add a suitable filter expression at the end of the tcpdump command to only include the traffic generated by your app (e.g. port 123) | |
The program netbps is this: | |
#!/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; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment