每日下载限制

A.A*_*rse 5 command-line networking

我正在寻找一种方法来为我的 Ubuntu 服务器创建每日互联网限制。所有出站流量都离开 Eth2,这是一个 USB 加密狗,这是预付费的,孩子们很快就会吃掉它。我需要将我的预付金额通常为 12Gb 分成每日分配,并在达到此金额后的第二天停止流量。也许有一个网页说超出了每日限制。

最好是来自 CLI 的东西。这是一个只有 SSH 访问权限的无头野兽。

VNSTAT 似乎做我需要的,我只是没有脚本技能让它驱动 ifdown 命令。

谢谢。

pa4*_*080 5

我的建议是以下脚本,它将从中获取传入和传出流量的数据,ifconfig interface-name并将总和与预定义的限制值进行比较。此操作将每 5 秒重复一次(例如)。

当流量(收入+结果)等于或大于限制时,脚本将禁用目标接口并退出。接口将被禁用的实际值与限制值之间的最大差异将等于5sx MaxSpeed

该脚本可以由 Cron 作业执行。因此,您将能够为一周中的每一天设置不同的作业,等等。此外,当达到限制时,您可以手动运行脚本并增加额外的流量。

脚本名称应为traffic-watch,否则应更改其第 5 行。我的建议是把它放在 中/usr/local/bin,这样它就可以作为 shell 命令使用。不要忘记使其可执行:chmod +x /usr/local/bin/traffic-watch.

该脚本应以 root ( sudo)身份执行。它会创建一个日志文件:/tmp/traffic-watch-interface-name.log,您可以在其中检查最后一个操作。该脚本有两个输入变量:

  • $1= $LIMIT- 以 MB 为单位的流量限制值 - 默认值为400.
  • $2= $IFACE- 目标网络接口的名称 - 默认值为eth0.
  • 如果要在脚本执行期间覆盖这些值,请使用以下格式:

    traffic-watch "250" "enp0s25"
    traffic-watch "250"
    traffic-watch "" "enp0s25"
    
    Run Code Online (Sandbox Code Playgroud)

将 'traffic-watch' 与 'crontab' 一起使用。如果你想每天早上在 运行脚本6:30,打开 root 的 Crontab ( sudo crontab -e) 并添加以下行:

30 6 * * * /usr/local/bin/traffic-watch 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

手动使用'traffic-watch'。要以 root 身份运行脚本并将其推送到后台,我们将使用sudo -b

sudo -b traffic-watch "150" 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

脚本“traffic-watch”的内容是:

traffic-watch "250" "enp0s25"
traffic-watch "250"
traffic-watch "" "enp0s25"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 更新和升级系统时禁用脚本!缺少互联网可能是包裹破损的原因。

  • 在运行新脚本之前尝试终止脚本的前一个实例(以防未达到其限制)是个好主意:

    30 6 * * * /usr/local/bin/traffic-watch 2>/dev/null
    
    Run Code Online (Sandbox Code Playgroud)
    sudo -b traffic-watch "150" 2>/dev/null
    
    Run Code Online (Sandbox Code Playgroud)
  • 可能2>/dev/null不是强制性的,因为我认为所有错误都是/dev/null由脚本本身重定向到的。

  • 要远程检查剩余流量,您可以使用以下命令:

    ssh user@host.or.ip tail -n3 /tmp/traffic-watch-eth0.log
    
    Run Code Online (Sandbox Code Playgroud)

    感谢@Dessert 提出这个想法!(替换eth0为实际使用的接口。)

  • 要恢复您的网络接口 UP:首先 iseifconfig -a找到它的名称。然后sudo ifconfig INTERFACE up

  • 可以重新创建此脚本以使用iptables而不是ifconfig - up/down. 这将是一个强大的解决方案。

  • 该脚本作为 GitHub 存储库提供:https : //github.com/pa4080/traffic-watch

  • 此处提供了另一个基于当前的脚本,该脚本只会获取一段时间内的流量:如何以简单格式通过命令行获取当前网络流量

参考: