`

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网卡启用trunk模式操作标准

    ### Linux网卡Trunk模式配置详解 #### 一、引言 在Linux环境中,通过配置网卡的Trunk模式,可以实现单个物理网卡承载多个逻辑接口的需求,这对于网络隔离与流量分类具有重要意义。本文将详细介绍如何在CentOS 5.5...

    Linux双网卡绑定配置

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

    Linux双网卡绑定实现负载均衡和失效保护.pdf

    Linux系统中,通过修改网络脚本配置文件、内核参数配置文件,以及在启动脚本中进行相关配置,即可实现双网卡的绑定。 在本文件中提到的几个关键词和概念包括: 1. bonding:是指在Linux操作系统中实现网络设备绑定...

    Linux网络工具-ethtool-5.14(21年最新版本)

    在Linux系统中,`ethtool`是一款非常重要的网络诊断和配置工具,它允许用户查看和调整以太网卡的参数。在2021年发布的5.14版本中,`ethtool`继续提供了对最新硬件的支持和增强的功能。下面我们将详细探讨`ethtool`的...

    windows2008Broadcom双网卡绑定.pdf

    通过以上知识点可以了解到,Windows Server 2008和Linux环境下实现双网卡绑定涉及到一系列的技术步骤和配置文件的修改。具体实施时,需要对网络基础、操作系统、硬件特性有深刻理解,才能成功设置并维护双网卡绑定...

    常用操作系统双网卡绑定方法

    首先,对于RHEL5.7 Linux系统,网卡绑定的配置通常涉及到修改网络配置脚本文件。通过配置文件/etc/sysconfig/network-scripts/ifcfg-bond0定义绑定接口的属性,其中包括设置静态IP地址、子网掩码、网关等。接着,...

    初级linux培训实验手册

    **第四章 Linux下的文本编辑器vi** - **实验5:练习使用vi编辑器** - **实验目标:** - 熟练使用vi编辑器进行文本编辑。 - **实验步骤:** - 开启vi编辑器并学习其基本模式和命令。 - 编辑文档,包括插入、...

    Linux使用小结

    2. **解压并安装JDK:** 使用 `tar -zxvf jdk-7u80-linux-x64.tar.gz` 命令解压安装包,并将解压后的文件移动到 `/usr/local` 目录下。 3. **配置环境变量:** 编辑 `/etc/profile` 文件,添加以下内容: ```bash ...

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

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

    Intel X710/82599万兆网卡DPDK测试方法.doc

    解压缩后,修改`config/common_base`文件,编译并执行`dpdk-setup.sh`脚本,进行相应的模块加载、大页内存分配和网卡绑定。 3. **设备绑定**:使用`dpdk-setup.sh`中的选项将网卡绑定到IGB UIO模块,以便于DPDK直接...

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

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

    ioatdma-3.61.tar.gz_ctystal beach /dma_ioatd_ioatdma lin_ioatdma

    ".tar.gz"是Linux下常用的压缩格式,用于打包并压缩多个文件或目录。"ctystal_beach_"可能指的是Intel的Crystal Beach DMA引擎,这是一种集成在Intel 5000系列芯片组中的高级DMA(直接内存访问)技术。"dma_ioatd_...

    uboot 启动远程 Kernel(TFTP)以及挂载远程 ROOTFS(NFS)

    本例中使用的是基于kasim修改版的U-Boot,可以通过以下链接下载:[gitorious.org/opencsbc/u-boot](https://gitorious.org/opencsbc/u-boot/trees/mini210_linaro-2012.11-stable)。 - 解压缩并存放于适当的位置。...

    Windows XP下安装配置Snort.pdf

    - **验证**: 打开命令提示符,切换到 Snort 的安装目录,使用命令 `snort.exe –W` 查看 Snort 版本信息和主机所有网卡。如果出现 Snort 的标志——一个奔跑的小猪图标,则表示安装成功。 **3. MySQL** - **功能**:...

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

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

    5-NSD云计算王者荣耀-面试题参考.pdf

    19. **远程查看Linux服务运行时间** - 使用SSH登录后查询`uptime`命令。 20. **防火墙默认安全区域** - `public`: 允许HTTP、HTTPS等基本服务。 - `internal`: 允许更多内部服务。 - `trusted`: 完全信任。 - ...

    TRex使用说明1

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

Global site tag (gtag.js) - Google Analytics