首页
关于
Search
1
AdGuardHome 安装及部署教程
43,057 阅读
2
关于微软Azure学生白嫖指南
10,626 阅读
3
搭建基于telegram的无限网盘
10,497 阅读
4
Oracle开放全部端口并关闭防火墙
10,418 阅读
5
最新Cloudflare免费自选IP教程(非Partner)
9,710 阅读
默认分类
技术搬砖
教学设计
故事奇谈
生活琐事
错题分析
精品软件
登录
找到
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 -
技术搬砖
# 自动检测
# 流量监控
admin
1月17日
0
19
0