`

转:LINUX下查看网卡流量的脚本(完美修改版)

阅读更多

转载自 mnsch
最终编辑 wangpeng168

修改内容:

  • 修复了会显示负数的问题
  • 增加了bits/s的统计情况
  • 增加了最后的汇总平均值
#!/bin/bash
# osdba 2008.10.22 monitor the interface's network traffic.
#   Zeuslion 2009.08.29.
if [ $# -ne 3 ];then
   echo Useage : $0 interface interval count
   echo Example: $0 eth0 2 10
   exit
fi
eth=$1
count=$3
interval=$2
inbytesfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $2}')
if [ -z "$inbytesfirst" ];then
    echo The network interface $eth is not exits!
    exit 1;
fi
outbytesfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $10}')
inpacketsfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $3}')
outpacketsfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $11}')
sleep $interval"s"
i=0
while [ "$i" -lt "$count" ]
do
   inbytesend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $2}')
   outbytesend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $10}')
   inpacketsend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $3}')
   outpacketsend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $11}')

   bytesin=$(($inbytesend-$inbytesfirst))
   bytesout=$(($outbytesend-$outbytesfirst))
   packetsin=$(($inpacketsend-$inpacketsfirst))
   packetsout=$(($outpacketsend-$outpacketsfirst))

   if [ "$bytesin" -lt "0" ];then
      bytesin=$((4294967295-$inbytesfirst+$inbytesend))
      #echo bytesin $bytesin $inbytesfirst $inbytesend
   fi
   if [ "$bytesout" -lt "0" ];then
      bytesout=$((4294967295-$outbytesfirst+$outbytesend))
      #echo bytesout $bytesout $outbytesfirst $outbytesend
   fi
   if [ "$packetsin" -lt "0" ];then
      packetsin=$((4294967295-$inpacketsfirst+$inpacketsend))
      #echo packetsin $packetsin $inpacketsfirst $inpacketsend
   fi
   if [ "$packetsout" -lt "0" ];then
      packetsout=$((4294967295-$outpacketsfirst+$outpacketsend))
      #echo packetsout $packetsout $outpacketsfirst $outpacketsend
   fi

   bytesin=$(($bytesin/$interval))
   bytesout=$(($bytesout/$interval))
   packetsin=$(($packetsin/$interval))
   packetsout=$(($packetsout/$interval))

   sumbytesin=$(($sumbytesin+$bytesin))
   sumbytesout=$(($sumbytesout+$bytesout))
   sumpacketsin=$(($sumpacketsin+$packetsin))
   sumpacketsout=$(($sumpacketsout+$packetsout))

   if [ $(($i%20)) -eq 0 ];then
      echo " ifname   | in_kbits/s out_kbits/s | in_kBytes/s out_kBytes/s | in_packets/s out_packets/s"
      echo "--------- | ---------- ----------- | ----------- ------------ | ------------ -------------"
   fi
   echo $eth $bytesin $bytesout $packetsin $packetsout |awk '{printf("%9s | %10d %11d | %11d %12d | %12d %13d\n",$1,$2/128,$3/128,$2/1024,$3/1024,$4,$5)}'
   inbytesfirst=$inbytesend
   outbytesfirst=$outbytesend
   inpacketsfirst=$inpacketsend
   outpacketsfirst=$outpacketsend
  
   i=$(($i+1))
   sleep $interval"s"
done

sumbytesin=$(($sumbytesin/$i))
sumbytesout=$(($sumbytesout/$i))
sumpacketsin=$(($sumpacketsin/$i))
sumpacketsout=$(($sumpacketsout/$i))

echo "--------- | ---------- ----------- | ----------- ------------ | ------------ -------------"
echo Average $sumbytesin $sumbytesout $sumpacketsin $sumpacketsout |awk '{printf("%9s | %10d %11d | %11d %12d | %12d %13d\n",$1,$2/128,$3/128,$2/1024,$3/1024,$4,$5)}'

输出示例:

[root@localhost nat]# ./ifstat.sh eth1 2 5
ifname   | in_kbits/s out_kbits/s | in_kBytes/s out_kBytes/s | in_packets/s out_packets/s
--------- | ---------- ----------- | ----------- ------------ | ------------ -------------
     eth1 |     204743      112824 |       25592        14103 |        38459         38172
     eth1 |     212353      111547 |       26544        13943 |        39025         38152
     eth1 |     204263      114007 |       25532        14250 |        38802         38233
     eth1 |     208357      111877 |       26044        13984 |        38706         38123
     eth1 |     215614      113400 |       26951        14175 |        39950         39375
--------- | ---------- ----------- | ----------- ------------ | ------------ -------------
Average |     209066      112731 |       26133        14091 |        38988         38411

分享到:
评论

相关推荐

    linux主机流量实时监控脚本

    本脚本"linux主机流量实时监控脚本"专注于提供对以太网接口(如eth0-9)的流量监控功能,但不包含对虚拟化网卡的支持。如果需要监控虚拟化环境下的网络流量,用户需要自行对脚本进行相应的修改。 首先,让我们深入...

    Linux双网卡绑定配置

    在Linux系统中,网卡配置文件位于/etc/sysconfig/network-scripts/目录下。我们需要修改两个网卡的配置文件ifcfg-eth0和ifcfg-eth1,以便它们都属于同一个bond接口。 ifcfg-eth0: ``` DEVICE=eth0 ONBOOT=yes ...

    Kali Linux渗透测试(安全牛).txt

    │ 任务006:安装Java、安装显卡驱动、安装网卡补丁、并发线程限制、电源优化.mp4 │ 任务007:.mp4 │ 任务008:.mp4 │ ├─第4章 实验环境 │ 任务009:实验环境.mp4 │ ├─章 基本工具 │ 任务010:基本工具-...

    利用红旗LINUX60桌面版架设PPPOE服务器.pdf

    配置文件 `/etc/sysconfig/network-scripts` 下的 `ifcfg-eth0` 和 `ifcfg-eth1` 需要相应修改。 3. **PPPOE服务的安装与设置** - 检查系统是否已安装PPPOE服务。如果没有,可以通过包管理器(如`yum`)安装必要...

    2010年外包到腾讯做web_测试的笔试题

    6. 查看侦听端口:`netstat -lnp`,查看指定网卡tcp流量:`tcpdump -i <网卡名>`。 以上是腾讯外包Web测试笔试题目的主要知识点详解,这些内容反映了当时Web开发和测试人员需要掌握的基础技能,包括前端HTML和...

    TRex使用说明1

    - **Stateless模式**:可轻松创建stateless流量流,支持高并发和报文字段修改,适用于大量流量生成(如20Mpps)。 - **统计**:提供每条流的详细统计信息,有助于性能分析。 - **API支持**:提供Python API,便于...

    aircrack-ng-1.6.tar.gz

    - **监测模式(Monitor Mode)**:让网卡进入监测模式,以便捕获所有无线网络流量。 - **欺骗攻击(Deauthentication Attacks)**:通过发送特定的欺骗帧,迫使设备断开与接入点的连接,便于进行破解。 - **客户端...

    带宽合并(详情看我帖子)

    2. 操作系统支持:不同的操作系统对网卡交火的支持程度不同,Windows、Linux和某些版本的Unix都提供了相应的配置工具或模块。 3. 路由器/交换机设置:在进行带宽合并时,路由器和交换机也需要支持链路聚合。通常,...

    Vermon-开源

    在开源软件的世界里,Vermon的开放源代码特性意味着用户和开发者都可以自由查看、修改和分发其源代码。这种开放性鼓励了社区协作和持续改进。用户可以根据自身需求定制功能,或者为项目贡献新的功能和修复。Perl是一...

    RaspberryPi-Packet-Sniffer:使用Raspberry Pi创建的HTTP和HTTPS嗅探工具

    Raspberry Pi是一款基于Linux的操作系统,通常使用的发行版是Raspbian。在这个项目中,你需要设置Raspbian并确保它能够通过无线网络连接到目标设备。配置包括设置静态IP地址、开启SSH服务以及安装必要的软件包。 **...

Global site tag (gtag.js) - Google Analytics