V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
angeni
V2EX  ›  程序员

写了个 shell 脚本笑不活了

  •  
  •   angeni · 127 天前 · 2866 次点击
    这是一个创建于 127 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前不是发了个帖子想低价嫖阿里的 5 年 200G 免费流量看看外面的世界嘛,还询问怎么防止盗刷流量

    https://v2ex.com/t/1053353

    然后我自己糊了一个,因为是测测试脚本流量上限不高只有 150G 并且是上下行相加的。

    我怕被刷 crontab 设置的比较急进 1 分钟

    今天绝了开机就关开机就关,手速跟不上了。。。

    有什么好方法能让我上机一手不我去改改脚本

    emmm

    #!/bin/bash
    
    # 设置网卡名称
    INTERFACE="eth0"
    # 设置流量限制(单位:GB )
    LIMIT=150
    
    # 检查 vnstat 和 jq 是否已安装
    if ! command -v vnstat &> /dev/null; then
    echo "vnstat 未安装,请安装后重试。"
    exit 1
    fi
    
    if ! command -v jq &> /dev/null; then
    echo "jq 未安装,请安装后重试。"
    exit 1
    fi
    
    # 检查 bc 是否已安装
    if ! command -v bc &> /dev/null; then
    echo "bc 未安装,请安装后重试。"
    exit 1
    fi
    
    # 获取当前流量(单位:KB )
    VNSTAT_JSON=$(vnstat -i $INTERFACE --json)
    echo "vnstat JSON 输出: $VNSTAT_JSON"
    
    # 使用 jq 解析 JSON 数据获取接收和发送的流量(单位:KB )
    RX=$(echo $VNSTAT_JSON | jq -r '.interfaces[0].traffic.total.rx')
    TX=$(echo $VNSTAT_JSON | jq -r '.interfaces[0].traffic.total.tx')
    
    # 输出解析结果
    echo "接收流量 (RX): $RX KB"
    echo "发送流量 (TX): $TX KB"
    
    # 检查 RX 和 TX 是否为有效的数字
    if ! [[ $RX =~ ^[0-9]+$ ]] || ! [[ $TX =~ ^[0-9]+$ ]]; then
    echo "RX 或 TX 不是有效的数字。"
    exit 1
    fi
    
    # 计算总流量(单位:GB )
    TOTAL=$(echo "scale=2; ($RX + $TX) / 1024 / 1024 / 1024" | bc)
    
    # 输出当前总流量
    echo "当前流量:$TOTAL GB"
    
    # 检查是否超过流量限制
    if (( $(echo "$TOTAL >= $LIMIT" | bc -l) )); then
    echo "流量限制已超出,正在禁用网络接口。"
    sudo shutdown now
    else
    echo "当前流量未超出限制。"
    fi
    
    #!/bin/bash
    
    # 停止 vnStat 服务
    sudo systemctl stop vnstat # 如果使用 systemd 管理服务
    
    # 删除 vnStat 数据库文件(根据需要修改网络接口名称)
    sudo rm -f /var/lib/vnstat/* # 删除所有 vnstat 数据库文件
    
    # 重新启动 vnStat 服务
    sudo systemctl start vnstat # 如果使用 systemd 管理服务
    
    echo "vnStat 流量统计数据已重置。"
    
    
    # 每 5 分钟检查一次流量
    */5 * * * * /root/check_traffic.sh
    
    # 每月 1 号重置网络和流量统计
    0 0 1 * * /root/reset_network.sh
    
    17 条回复    2024-07-05 11:32:41 +08:00
    NessajCN
        1
    NessajCN  
       127 天前
    额,你禁用网络接口就禁用网络接口,shutdown 干啥...
    angeni
        2
    angeni  
    OP
       127 天前
    @NessajCN 一开始是禁用的,后面想直接关机实在点。。。
    1423
        3
    1423  
       127 天前
    维护模式
    NessajCN
        4
    NessajCN  
       127 天前
    看你脚本里能用 sudo 那大概设置的无密码模式或者直接能登 root 咯?
    那可以试试 ssh 的时候带着命令,譬如 ssh root@ip sudo rm /etc/cron.d/xxx
    然后开了机之后一直连
    angeni
        5
    angeni  
    OP
       127 天前
    @NessajCN 还可以这样,学习了~
    ruidoBlanco
        6
    ruidoBlanco  
       127 天前
    「一頓操作猛如虎,一看輸出二百五」
    mongoose
        7
    mongoose  
       127 天前
    阿里云这个学生认证和实名认证需要是一个人吗?
    cocong
        8
    cocong  
       127 天前
    直接断网不就不会超流量也就不会关机了。
    GoRoad
        9
    GoRoad  
       127 天前
    hhhhh
    Ploter
        10
    Ploter  
       127 天前
    差点直接用了,幸好当时嫌麻烦没弄🌚
    mikeguan
        11
    mikeguan  
       127 天前 via Android
    新开个机器,磁盘挂过去,怎么弄都行
    或者 vnc/串口连接修改下脚本
    mingtdlb
        12
    mingtdlb  
       126 天前
    @mongoose 我觉得阿里不至于那么弱智,不是同一个人会给你过。
    angeni
        13
    angeni  
    OP
       126 天前
    @mongoose 肯定同一人呀
    guanzhangzhang
        15
    guanzhangzhang  
       126 天前
    sshpass xxxx ssh <ip> systemctl stop crond
    guanzhangzhang
        16
    guanzhangzhang  
       126 天前
    @guanzhangzhang sshpass xxxx ssh <ip> systemctl disable --now crond
    siteshen
        17
    siteshen  
       126 天前
    #4 @NessajCN 可以稍改进一下:

    ssh root@ip sudo mv /root/check_traffic.sh /root/check_traffic.sh.disabled
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2732 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:11 · PVG 20:11 · LAX 04:11 · JFK 07:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.