本文目录导读:

是的,有很多实用脚本可以监控网络流量并进行统计,下面我为你介绍几种常见且实用的方法,从简单到复杂,适用于不同场景。
实时流量查看(最简单的命令行方式)
如果你想快速、实时地查看每个网卡的流量速度,不需要安装额外软件,使用 Linux 自带的工具即可。
脚本示例:使用 sar 命令
sar 是 sysstat 包的一部分,功能强大且轻量。
# 先安装 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
使用方法:
- 将脚本保存为
traffic_stats.sh。 chmod +x traffic_stats.sh- 开始监控:
./traffic_stats.sh start - 等你想统计的时段结束后:
./traffic_stats.sh stop
优点: 无需任何额外依赖,纯 Bash 脚本,适合嵌入式或最小化系统。
按进程或IP统计流量(高级工具)
如果你需要更精细的统计,哪个IP在疯狂下载?”或者“哪个进程占用了大部分带宽?”,可以使用 nethogs 或 iftop。
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界面,协议分析,异常检测 |
快速选择:
- 只是想看一眼网速: 用
nload或sar -n DEV 1。 - 想监控一个下载任务跑了多少流量: 用我提供的
traffic_stats.sh脚本。 - 感觉网卡有异常流量,想查查是哪个程序或IP: 用
nethogs或iftop。 - 公司或家庭服务器需要长期记录流量,用于报表或分析: 用
vnstat。
希望这些脚本和工具对你有帮助,如果你有具体的系统(如 Windows 或其他 Linux 发行版)或需求(如统计特定端口),可以告诉我,我可以提供更针对性的解决方案。