如何从 Linux 终端监控接口的传输速度?

如何从 Linux 终端监控接口的传输速度?

我通过 SSH 连接到服务器,我想知道它的上传和下载速度。最好我还想看看正在下载/上传的内容以及该过程的速度。关于我应该搜索什么,有什么建议或提示吗?

答案1

为了获得更具体的流量细分,我使用 tcpdump 并将转储传递给 wireshark。然后使用统计菜单。但对于 ssh,很难看到发生了什么,因为它已经加密了。你只是想知道你的传输速度吗?rsync --progress -av srouce/ dest/会这样做。

或者你可能想要:适用于 Linux 的基于 IP /进程的带宽使用情况统计工具?


如果您不想安装任何东西,您可以cat /proc/net/dev在一个间隔内(可能在睡眠循环中),然后只取两次轮询之间发送和接收字节的差值。

对于程序来说,我喜欢apt-get install bmon。bmon 是一个很好的小型终端 curses 程序。

答案2

答案3

或者,如果您没有 root 权限,数据将存储在 /proc/net/dev 中。有点被黑了python 脚本几年前我写过很多文章来说明如何在没有 pcap/root 的情况下完成此操作。

答案4

我不喜欢这些答案。要么需要第三方程序,要么信息量太大。

实际上,您可以在以下路径中找到所需的所有网络信息。将 $int_name 替换为您的接口名称

/sys/class/net/$int_name/statistics

例子:

  • 每秒接收字节数 =$(cat /sys/class/net/$int_name/statistics/rx_bytes)
  • 每秒发送位数 =$(expr $(cat /sys/class/net/$int_name/statistics/tx_bytes) \*8)
  • 发送 pps =$(cat /sys/class/net/$1/statistics/tx_packets)

您可以使用我下面创建的脚本来显示给定接口的所有 tx、rx 和总数。我称之为ninfo

#!/bin/bash
output(){
    echo "==== $1 ===="
    echo "rx_bits       $(expr $(cat /sys/class/net/$1/statistics/rx_bytes) \* 8)"
    echo "rx_bytes      $(cat /sys/class/net/$1/statistics/rx_bytes)"
    echo "tx_bits       $(expr $(cat /sys/class/net/$1/statistics/tx_bytes) \* 8)"
    echo "tx_bytes      $(cat /sys/class/net/$1/statistics/tx_bytes)"
    echo "rx_packets    $(cat /sys/class/net/$1/statistics/rx_packets)"
    echo "tx_packets    $(cat /sys/class/net/$1/statistics/tx_packets)"
    echo "total_bits    $(expr $(expr $(cat /sys/class/net/$1/statistics/tx_bytes) \* 8) + $(expr $(cat /sys/class/net/$1/statistics/rx_bytes) \* 8))"
    echo "total_bytes   $(expr $(cat /sys/class/net/$1/statistics/tx_bytes) + $(cat /sys/class/net/$1/statistics/rx_bytes))"
    echo "total_packets $(expr $(cat /sys/class/net/$1/statistics/tx_packets) + $(cat /sys/class/net/$1/statistics/rx_packets))"
}

if [ -z $1 ]; then
    echo "[!] ERROR: please provide an interfaces name"
    exit 1
fi

cints=$(ip -br a | awk '{print$1}' | sed 's/@.*//g')
found=0

for i in $cints; do  
    if [ "$i" == "$1" ]; then
        found=1
    else
        :   
    fi       
done

if [ $found -eq 1 ]; then
    output $1
else
    echo "[!] ERROR: '$1' is not an interface on this system. Must use one of the following:"
    echo "$cints"
    exit 1
fi

使用运行ninfo $int_name。如果您不知道名称,脚本将列出系统上的接口。

现在我说我不喜欢这个的第三方程序,但看看mmwatch它是一个像watch但将不同的整数转换为费率的实用程序:

https://github.com/cloudflare/cloudflare-blog/blob/master/2017-06-29-ssdp/mmwatch

下载并保存到你的路径中。然后你可以运行 mmwatch + 我的脚本

mmwatch "./ninfo $int_name"

现在您可以查看费率。

相关内容