一旦传输的数据量达到预定义的限制,我该如何关闭接口?

一旦传输的数据量达到预定义的限制,我该如何关闭接口?

我使用 Linux 机器作为两个网络接口之间的路由器,用于路由本地流量往返互联网。所讨论的互联网连接具有定义的数据限额,超出限额会很昂贵。

理想情况下,我希望 Linux 机器能够监控通过面向互联网的接口传输的数据量(接收和传输数据的总和),一旦超过该限制,就关闭接口。我找不到现成的工具来实现这个目的。我该如何最好地做到这一点?

答案1

一种选择是使用cron每分钟运行一次的根作业以及以下脚本(将输出附加到日志文件):

#!/bin/bash
USAGE=$(awk '/wlan0/ {print $2+$10}' /proc/net/dev)
USAGEMIB=$(echo "$USAGE" | awk '{printf "%0.1f", $1 / 1024 / 1024}')
LIMIT=500
ABOVELIMIT=$(echo "$USAGEMIB" "$LIMIT"| awk '$1 > $2 {print "1"}')
echo -e $(date)"\t"$USAGE"\t"$USAGEMIB" MiB"
if [ "$ABOVELIMIT" == "1" ]
  then
    echo "Limit reached."
    /sbin/ifdown wlan0
fi

这将在 中的相关条目中汇总接收和传输的字节数/proc/net/dev,将其作为字节和 MiB 打印到 stdout(重定向到日志),并且如果使用量超出了文件顶部附近硬编码的限制,则会关闭连接。 它不是特别强大(特别是它没有任何错误处理),但应该可以达到预期的目的。

相关内容