如何监控给定接口上的总传输网络流量

如何监控给定接口上的总传输网络流量

我需要监控通过给定接口(移动宽带加密狗)的流量,以便在总量达到(或接近)给定量时通知我。

我实际上拥有免费的移动宽带,但限制并不宽裕,每次我想要使用加密狗时,我都想启动一个脚本,当它接近我的限制时发出警告,或者在我退出脚本时告诉我总数。

我现在需要的帮助是使用正确的命令以人性化的值记录总传输量,即简单到“自监控开始以来,您已传输了 12.8Mb”。除了累计总量,我不在乎速度、利用率或任何其他东西。

一旦我有办法计算总传输量,我就可以高兴地投入一些 ipfw 命令来防火墙接口并阻止进一步的传输,直到我这么说。

我正在使用 Mac OS X 10.7,但想在 bash 脚本中使用标准终端命令(netstat、tcpdump 以及任何预安装的工具),而不是使用下载的工具(即使它可以完美地完成工作 - 我需要它在脚本中,这样我就可以按照我想要的方式将自己的逻辑放在它周围)。

答案1

您可以使用 OSX 中的数据包过滤器 (PF) 来实现此目的。首先,创建一个规则,标记接口上的所有流量(en1在此示例中 - 用您的实际界面替换):

echo "pass on en1 label \"traffic-en1\"" | sudo pfctl -f-
sudo pfctl -E # enable PF

现在正在计算流量,您可以使用以下方式查看计数器sudo pfctl -sl

traffic-en1 4701 69 13029 40 6292 29 6737

请随意将它们转换为更加人性化的格式:

sudo pfctl -sl | awk '$1="traffic-en1" { printf "KBytes total: %d (in: %d, out: %d)\n", $4/1024, $6/1024, $8/1024 }'

这应该会给你类似的结果KBytes total: 192 (in: 95, out: 97)

您可以使用 重置计数器sudo pfctl -z

笔记:当调用 pfctl 时,OS X 可能会抱怨“内核不支持 ALTQ,ALTQ 相关功能已禁用”——这是完全正常的,可以忽略。

笔记2:不建议远程操作防火墙设置,但在最坏的情况下pfctl -d会禁用整个防火墙(如果您以某种方式将自己锁定)。

相关内容