我使用 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(重定向到日志),并且如果使用量超出了文件顶部附近硬编码的限制,则会关闭连接。 它不是特别强大(特别是它没有任何错误处理),但应该可以达到预期的目的。