首页
关于
Search
1
AdGuardHome 安装及部署教程
42,172 阅读
2
搭建基于telegram的无限网盘
10,332 阅读
3
关于微软Azure学生白嫖指南
10,260 阅读
4
Oracle开放全部端口并关闭防火墙
10,106 阅读
5
最新Cloudflare免费自选IP教程(非Partner)
9,615 阅读
默认分类
技术搬砖
教学设计
故事奇谈
生活琐事
错题分析
精品软件
登录
Search
标签搜索
docker
张至顺
PHP
图床
Cloudflare
金刚长寿功
内网穿透
PT
qBittorrent
阿里云
onedrive
telegram
代理
青龙
FRP
python
一键
telegraph
ipv6
cf_workers
myedunote
累计撰写
113
篇文章
累计收到
1
条评论
首页
栏目
默认分类
技术搬砖
教学设计
故事奇谈
生活琐事
错题分析
精品软件
页面
关于
搜索到
1
篇与
流量监控
的结果
2025-01-17
自动检测流量关闭网络接口、次月自动恢复网络
自动检测流量关闭网络接口、次月自动恢复网络原文地址:https://www.nodeseek.com/post-127477-1一、环境安装这个脚本需要在Linux系统上运行,并需要vnstat和iptables这两个工具。如果你的系统上没有这两个工具,你可以通过以下命令来安装:对于基于Debian的系统(如Ubuntu):apt-get update -y apt-get install vnstat iptables bc -y systemctl start vnstat systemctl enable vnstat对于基于RPM的系统(如CentOS):yum update -y yum install vnstat iptables bc -y. systemctl start vnstat systemctl enable vnstat这个命令用于安装 iptables,bc 和 vnstat 这三个软件包。iptables 是用于配置 Linux 内核防火墙的工具,bc 是一个任意精度的计算器语言,vnstat 是一个控制台下的网络流量监控工具。-y 参数表示在安装过程中自动回答所有提示为 'yes'二、脚本编写编写监控脚本 /root/monitor_traffic.sh:vim /root/monitor_traffic.sh将下列代码粘贴:#!/bin/bash # Parameter order: LIMIT_GB, reset_day, CHECK_TYPE, INTERFACE LIMIT_GB=${1:-1024} reset_day=${2:-1} CHECK_TYPE=${3:-4} INTERFACE=${4:-$(ip route | grep default | awk '{print $5}')} LIMIT=$(echo "$LIMIT_GB * 1024" | bc) echo "流量限制:$LIMIT MiB" echo "流量将在每月的第 $reset_day 天重置" current_day=$(date +'%-d') last_day_of_month=$(date -d "$(date +'%Y%m01') +1 month -1 day" +%d) if [ "$current_day" -eq "$reset_day" ] || ([ "$reset_day" -gt "$last_day_of_month" ] && [ "$current_day" -eq "$last_day_of_month" ]); then if [ ! -f "/tmp/vnstat_reset" ]; then touch /tmp/vnstat_reset rm /var/lib/vnstat/* sudo systemctl restart vnstat echo "流量已经重置,下次重置将在下个月的第 $reset_day 天" else echo "今天已经进行过流量重置,无需再次重置" fi else if [ -f "/tmp/vnstat_reset" ]; then rm /tmp/vnstat_reset fi if [ "$current_day" -lt "$reset_day" ]; then days_until_reset=$(($reset_day - $current_day)) echo "还有 $days_until_reset 天流量将会重置" else days_until_reset=$(( $last_day_of_month - $current_day + $reset_day )) echo "还有 $days_until_reset 天流量将会重置" fi fi if [ -z "$INTERFACE" ]; then echo "错误:无法自动检测网络接口。请手动指定。" exit 1 fi echo "正在监控的网络接口:$INTERFACE" DATA=$(vnstat -i $INTERFACE --oneline) CURRENT_DATE=$(echo $DATA | cut -d ';' -f 8) TRAFFIC_RX=$(echo $DATA | cut -d ';' -f 13 | tr -d ' ' | sed 's/MiB//;s/GiB/*1024/;s/KiB/\/1024/' | bc) TRAFFIC_TX=$(echo $DATA | cut -d ';' -f 14 | tr -d ' ' | sed 's/MiB//;s/GiB/*1024/;s/KiB/\/1024/' | bc) echo "当前月份:$CURRENT_DATE" if [ "$CHECK_TYPE" = "1" ]; then TRAFFIC_TO_CHECK=$TRAFFIC_TX echo "只检查上传流量。当前上传流量为:$TRAFFIC_TX MiB。" echo "当前对比项是:上传流量。" elif [ "$CHECK_TYPE" = "2" ]; then TRAFFIC_TO_CHECK=$TRAFFIC_RX echo "只检查下载流量。当前下载流量为:$TRAFFIC_RX MiB。" echo "当前对比项是:下载流量。" elif [ "$CHECK_TYPE" = "3" ]; then TRAFFIC_TO_CHECK=$(echo "$TRAFFIC_TX $TRAFFIC_RX" | awk '{print ($1>$2)?$1:$2}') if [ "$TRAFFIC_TO_CHECK" = "$TRAFFIC_TX" ]; then echo "当前上传流量为:$TRAFFIC_TX MiB,下载流量为:$TRAFFIC_RX MiB。" echo "作为比较的流量是:上传流量。" else echo "当前上传流量为:$TRAFFIC_TX MiB,下载流量为:$TRAFFIC_RX MiB。" echo "作为比较的流量是:下载流量。" fi elif [ "$CHECK_TYPE" = "4" ]; then TRAFFIC_TO_CHECK=$(echo "$TRAFFIC_TX + $TRAFFIC_RX" | bc) echo "检查上传和下载流量的总和。当前上传流量为:$TRAFFIC_TX MiB,下载流量为:$TRAFFIC_RX MiB。" echo "作为比较的流量是:上传和下载流量的总和($TRAFFIC_TO_CHECK MiB)。" else echo "错误:未提供有效的流量检查参数。参数应为1(只检查上传流量)、2(只检查下载流量)、3(检查上传和下载流量中的最大值)或4(检查上传和下载流量的总和)。" exit 1 fi if (( $(echo "$TRAFFIC_TO_CHECK > $LIMIT" | bc -l) )); then iptables -F iptables -X iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT echo "警告:流量已超出限制!除SSH(端口22)外,所有端口已被阻止。" else iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F echo "流量在设定的限制内,所有流量都被允许。" fi这个脚本是用于监控Linux服务器上的网络流量,并根据设定的流量限制来决定是否阻止除SSH以外的所有网络流量。脚本接受四个参数,但是所有参数都是可选的,如果没有提供,脚本会使用默认值。这四个参数分别是:LIMIT_GB:流量限制,单位为GB。默认值为1024GB。reset_day:流量重置日,即每月的哪一天流量会被重置。默认值为1,即每月的第一天。CHECK_TYPE:流量检查类型。默认值为4。这个参数有四个可选值:1:只检查上传流量 2:只检查下载流量 3:检查上传和下载流量中的最大值 4:检查上传和下载流量的总和INTERFACE:网络接口。默认值为系统的默认网络接口。三、使用教程给 monitor_traffic.sh 脚本添加执行权限。chmod 是用于改变文件权限的命令,+x 表示添加执行权限chmod +x monitor_traffic.sh使用所有默认参数运行脚本:./traffic_monitor.sh这将会设置流量限制为1024GB,每月的第一天重置流量,检查上传和下载流量的总和,并使用系统的默认网络接口。设置流量限制为500GB,其他参数使用默认值:./traffic_monitor.sh 500设置流量限制为500GB,流量在每月的10号重置,其他参数使用默认值:./traffic_monitor.sh 500 10设置流量限制为500GB,流量在每月的10号重置,只检查下载流量,其他参数使用默认值:./traffic_monitor.sh 500 10 2设置流量限制为500GB,流量在每月的10号重置,只检查下载流量,并指定网络接口为eth0:./traffic_monitor.sh 500 10 2 eth0将 monitor_traffic.sh 脚本添加到 crontab,使其每分钟运行一次,并将脚本的输出重定向到 /root/脚本日志.txt 文件设置流量限制为190GB,流量在每月的10号重置,每分钟运行一次任务检查上传和下载流量中的最大值:(crontab -l ; echo "* * * * * /root/monitor_traffic.sh 190 10 3 > /root/脚本日志.txt") | crontab -
2025年01月17日
2 阅读
0 评论
0 点赞