2018-09-05 一个实时监听网络的流量的工具

2018-09-05  本文已影响0人  Seizens_Swift

首先放代码如下所示

#!/bin/bash

cp /proc/net/dev tmp_dev1
sed -i '1,2d' tmp_dev1
while(true);do
    sleep 1
    cp /proc/net/dev tmp_dev2
    sed -i '1,2d' tmp_dev2
    clear
    echo "*************************************************************************"
    awk 'NR==FNR{a[$1]=$2+$9} NR!=FNR{a[$1]=a[$1]-$2-$9} END{for(i in a) printf("%-15s current speed is %.2f Mb/s %.2f kb/s \n", i, a[i]/1024/1024, a[i]/1024)}' tmp_dev2 tmp_dev1
    echo "*************************************************************************"
    mv -f tmp_dev2 tmp_dev1
done

结果如下所示:

*************************************************************************
tunl0:          current speed is 0.00 Mb/s 0.00 kb/s 
eth0:           current speed is 0.00 Mb/s 0.00 kb/s 
ip6tnl0:        current speed is 0.00 Mb/s 0.00 kb/s 
lo:             current speed is 0.00 Mb/s 0.00 kb/s 
*************************************************************************

所需知识要点

Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。/proc文件系统中包含了很多目录,其中/proc/net/dev 保存了网络适配器及统计信息。

root@803e41ac5ea4:~/tes# cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0: 26249010   18636    0    0    0     0          0         0   409951    7300    0    0    0     0       0          0
 tunl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
ip6tnl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    lo:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

最左边的表示接口的名字,Receive表示收包,Transmit表示发送包;

则数据流量速度取得是发送和接收的字节数的量。取的间隔1s计算一次。

流程图如下

待更新。。。。。。

上一篇下一篇

猜你喜欢

热点阅读