如何在 Linux 的控制台中输出简单的网络活动图?

如何在 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

我将把发送/接收的字节显示作为练习。

主机流量:

#!/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;
}

相关内容