实用脚本能监控网络流量并统计吗?

wen 实用脚本 1

本文目录导读:

实用脚本能监控网络流量并统计吗?

  1. 实时流量查看(最简单的命令行方式)
  2. 统计一段时间内的总流量(简单脚本)
  3. 按进程或IP统计流量(高级工具)
  4. 长期、全面的流量监控方案
  5. 总结与选择建议

是的,有很多实用脚本可以监控网络流量并进行统计,下面我为你介绍几种常见且实用的方法,从简单到复杂,适用于不同场景。

实时流量查看(最简单的命令行方式)

如果你想快速、实时地查看每个网卡的流量速度,不需要安装额外软件,使用 Linux 自带的工具即可。

脚本示例:使用 sar 命令 sarsysstat 包的一部分,功能强大且轻量。

# 先安装 sysstat
# sudo apt install sysstat  (Debian/Ubuntu)
# sudo yum install sysstat  (CentOS/RHEL)
# 实时查看网络流量 (每秒刷新一次,共显示5次)
sar -n DEV 1 5

解释:

  • -n DEV:监控网络设备。
  • 1:每隔1秒采样一次。
  • 5:总共采样5次。
  • 输出会显示 rxkB/s(接收千字节/秒)和 txkB/s(发送千字节/秒)。

脚本示例:使用 nload 命令 nload 是一个更直观、带图形化进度条的工具。

# 安装
# sudo apt install nload
# 运行
nload

它会实时显示每个网卡的流量,用“#”号表示流量大小,非常直观。

统计一段时间内的总流量(简单脚本)

如果你需要统计一个进程(如某个服务)或者一个网卡在特定时间段(如24小时)内的总流量,可以写一个简单的 Shell 脚本。

脚本思路: Linux 系统会在 /proc/net/dev 文件中记录每个网卡累计的字节数,我们只需记录开始和结束时的数值,然后相减。

实用脚本:traffic_stats.sh

#!/bin/bash
# 指定要监控的网卡,eth0, ens33, wlp2s0 等
INTERFACE="eth0"
# 记录开始时间的文件
START_FILE="/tmp/net_traffic_start.txt"
END_FILE="/tmp/net_traffic_end.txt"
# 辅助函数:获取指定网卡的接收和发送字节数
get_bytes() {
    local iface=$1
    # 从 /proc/net/dev 中提取第2列(接收字节)和第10列(发送字节)
    awk -v iface="$iface" '$1 ~ iface":" {print $2, $10}' /proc/net/dev
}
# 开始监控
if [ "$1" == "start" ]; then
    get_bytes $INTERFACE > $START_FILE
    echo "开始监控网络接口 $INTERFACE,时间: $(date)"
    echo "初始数据已保存到 $START_FILE"
# 结束监控并计算流量
elif [ "$1" == "stop" ]; then
    if [ ! -f "$START_FILE" ]; then
        echo "错误:未找到开始记录文件,请先运行 'start'。"
        exit 1
    fi
    get_bytes $INTERFACE > $END_FILE
    # 读取开始和结束的字节数
    read rx_start tx_start < $START_FILE
    read rx_end tx_end < $END_FILE
    # 计算差值和单位转换
    rx_diff=$((rx_end - rx_start))
    tx_diff=$((tx_end - tx_start))
    # 转换为更易读的单位 (KB/MB)
    rx_readable=$(echo "scale=2; $rx_diff / 1024 / 1024" | bc)
    tx_readable=$(echo "scale=2; $tx_diff / 1024 / 1024" | bc)
    echo "监控结束,时间: $(date)"
    echo "网络接口: $INTERFACE"
    echo "----------------------------"
    echo "接收流量: $rx_readable MB"
    echo "发送流量: $tx_readable MB"
    echo "总  流  量: $(echo "scale=2; $rx_readable + $tx_readable" | bc) MB"
    echo "----------------------------"
    # 清理临时文件
    rm -f $START_FILE $END_FILE
else
    echo "用法: $0 {start|stop}"
    echo "示例:"
    echo "  $0 start   # 开始监控"
    echo "  # ... 等待一段时间 ..."
    echo "  $0 stop    # 停止监控并显示流量统计"
fi

使用方法:

  1. 将脚本保存为 traffic_stats.sh
  2. chmod +x traffic_stats.sh
  3. 开始监控./traffic_stats.sh start
  4. 等你想统计的时段结束后./traffic_stats.sh stop

优点: 无需任何额外依赖,纯 Bash 脚本,适合嵌入式或最小化系统。

按进程或IP统计流量(高级工具)

如果你需要更精细的统计,哪个IP在疯狂下载?”或者“哪个进程占用了大部分带宽?”,可以使用 nethogsiftop

a. 按进程统计流量:nethogs

  • 安装: sudo apt install nethogs
  • 使用: sudo nethogs eth0 (需要 root 权限)
  • 效果: 实时显示每个进程(如 Firefox, wget)的发送和接收速度。

b. 按连接统计流量:iftop

  • 安装: sudo apt install iftop
  • 使用: sudo iftop -i eth0
  • 效果: 实时显示每个 TCP/IP 连接的流量,可以清楚看到哪个远程 IP 跟你通信最频繁。
  • 统计模式:T 键可以在“总流量”和“2秒平均流量”等模式间切换。

长期、全面的流量监控方案

如果你需要长期收集数据、生成图表、设置告警(比如公司网络运维),下面两个是业界常用的解决方案。

a. vnstat(轻量级,后台服务)

  • 原理: 作为一个后台守护进程,它会持续监听网卡流量,并将数据存入数据库。

  • 优点: 非常轻量,几乎不占用 CPU,可以查询“、“这个月”、“昨天”的流量。

  • 安装和使用:

    sudo apt install vnstat vnstati  # 安装服务和图形工具
    sudo systemctl enable vnstat      # 设置开机自启
    sudo systemctl start vnstat       # 启动服务
    # 查看实时流量
    vnstat -l -i eth0
    # 查看今天流量统计
    vnstat -d
    # 查看当月流量统计
    vnstat -m
    # 生成图形化报告 (需要 vnstati)
    vnstati -s -i eth0 -o ~/summary.png  # 生成月度总结图

b. ntopng(Web界面,功能全面)

  • 原理: 提供强大的 Web 管理界面,能统计流量、分析协议(HTTP、P2P、流媒体等)、识别操作系统、甚至检测异常流量。
  • 安装: 通常是 sudo apt install ntopng
  • 使用: 访问 http://你的服务器IP:3000,登录后可查看详细图表和报表。
  • 适用场景: 需要详细分析和排查网络故障时。

总结与选择建议

工具/脚本 适用场景 安装复杂度 功能特点
traffic_stats.sh 快速、一次性统计某个任务的流量 纯脚本,轻量,无需依赖
sar/nload 实时查看当前流量速度 极低 简单直观,查看峰值速度
nethogs 想找出“哪个程序在偷流量” 按进程实时排名
iftop 想找出“哪个远程IP在偷流量” 按连接实时排名
vnstat 长期、轻量级记录流量总量 轻量服务,历史数据查询
ntopng 企业级网络流量分析 中等 Web界面,协议分析,异常检测

快速选择:

  • 只是想看一眼网速:nloadsar -n DEV 1
  • 想监控一个下载任务跑了多少流量: 用我提供的 traffic_stats.sh 脚本。
  • 感觉网卡有异常流量,想查查是哪个程序或IP:nethogsiftop
  • 公司或家庭服务器需要长期记录流量,用于报表或分析:vnstat

希望这些脚本和工具对你有帮助,如果你有具体的系统(如 Windows 或其他 Linux 发行版)或需求(如统计特定端口),可以告诉我,我可以提供更针对性的解决方案。

抱歉,评论功能暂时关闭!