仅使用 netstat 的网络带宽利用率 bash 脚本 [关闭]

Posted

技术标签:

【中文标题】仅使用 netstat 的网络带宽利用率 bash 脚本 [关闭]【英文标题】:network bandwith utilization bash script using only netstat [closed] 【发布时间】:2022-01-22 03:16:47 【问题描述】:

我在计算网卡上的带宽使用量时遇到问题。 我在 FreeBSD 上执行此操作,我只能使用 netstat 而无法安装其他模块。

我只是不知道如何计算它。这时我想出了一个想法,在脚本中执行命令

netstat -i -b -n -I INTERFACE 写入文件的第 8 列和第 11 列,即 Ibytes + Obytes

然后再次执行此命令并读取相同的列

在这里我有一个问题该怎么办?有没有计算带宽消耗的数学公式?

【问题讨论】:

带宽以比特/秒为单位,因此您需要字节 * 8 来获取比特,然后以某种方式获取行中的时间戳并计算时间戳中的比特/差异。人类可读的形式将除以 10(不是 2)的幂。 【参考方案1】:

使用 awk 处理netstat 输出以获得给定接口的Ibytes sum 和Obytes sum:

netstat -i -b -n -I IFACE |
awk 'BEGIN  getline   i += $8; o += $11  END  print i, o '

现在是一个简单的监控脚本:

#!/bin/sh

iface=$1
seconds=$2

while :
do
    read curr_Ibytes curr_Obytes < <(
        netstat -i -b -n -I "$iface" |
        awk 'BEGIN  getline   i += $8; o += $11  END  print i, o '
    )

    if [ -n "$prev_Ibytes" ]
    then
        printf 'in: %d B/s\tout: %d B/s\n' \
            $(( (curr_Ibytes - prev_Ibytes) / seconds )) \
            $(( (curr_Obytes - prev_Obytes) / seconds ))
    fi

    prev_Ibytes=$curr_Ibytes
    prev_Obytes=$curr_Obytes

    sleep "$seconds"
done

例子:

./netmon.sh em0 5
in: 520 B/s out: 3040 B/s
in: 325 B/s out: 1648 B/s
in: 95 B/s  out: 130 B/s
in: 1380 B/s    out: 23629 B/s
in: 232 B/s out: 146 B/s
...

【讨论】:

以上是关于仅使用 netstat 的网络带宽利用率 bash 脚本 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

nethogs 按进程实时统计网络带宽利用率的工具

网络性能测试工具iperf的使用与参数解析

提高 IDC 网络带宽利用率

提高 IDC 网络带宽利用率

网络带宽监控

查看linux网络流量及带宽