Как вывести простой график сетевой активности в консоли в Linux?
Там в tload
что графики нагрузки в среднем.
Там в iftop
что использование сети в качестве баров.
Как сделать что-то вроде этого:
# tcpdump -i eth0 --plot 'host 1.2.3.4'
13:45:03 | | 0 in 0 out
13:45:04 |O | 0 in 1MB out
13:45:05 |OOOI | 500 KB in 4MB out
13:45:06 |OIIII | 6MB in 1MB out
13:45:07 | | 0 in 0 out
13:45:08 |IIIIIIIIIIII | 53M in 0 out
1 ответ
Ну, если у вас установлены Perl и tcpdump, не должно быть слишком сложно взломать что-нибудь...
Следующий скрипт выведет что-то вроде:
# ./host_traffic google.com
0k
30k ****************
26k **************
24k *************
26k **************
43k **********************
39k ********************
24k *************
15k ********
0k
Я оставлю отправленные / полученные байты в качестве упражнения.
host_traffic:
#!/usr/bin/perl
$interface = "eth0";
$interval = 1;
$target_host = $ARGV[0];
$bytes = 0;
sub print_stats
{
$nstars = $bytes / 2000; # diagram scale = 2k
$stars = "";
for ($i = 0; $i < $nstars; $i++)
{ $stars .= "*"; }
printf("%4ik $stars\n", $bytes / 1000);
$bytes = 0;
alarm $interval;
}
$SIG{ALRM} = sub { print_stats(); };
alarm $interval;
$pcap_filter = "ip src or dst $target_host";
open(IN, "tcpdump -s 500 -l -n -i $interface '$pcap_filter' | ");
while (my $s = <IN>)
{ # parse tcpdump output
if ($s =~ m|(.*) IP (.*)\.([^.]*) > (.*)\.([^.]*): Flags \[(.*)\],.*, length (.*)|)
{
my ($timestamp, $src, $sport, $dst, $dport, $flags, $len) = ($1, $2, $3, $4, $5, $6, $7);
$bytes += $len;
next;
}
print $s;
}