Ubuntu Sniffer如何实现流量统计
小樊
35
2025-12-17 22:11:15
Ubuntu Sniffer流量统计实现指南
一、概念澄清与总体思路
- Sniffer通常指基于libpcap的抓包程序(如tcpdump/Wireshark),其“流量统计”常见两类:
- 按时间窗口的速率统计(如每秒收发速率、峰值、Top 连接/协议)。
- 按协议的累计统计(如按IP/端口/TCP/UDP/ICMP分类计数与字节数)。
- 实现路径可概括为:抓包(pcap)→ 过滤(BPF)→ 解析(IP/TCP/UDP 头)→ 聚合计数与速率计算 → 输出/告警/持久化。抓包与统计的核心能力由libpcap提供,配合BPF过滤可显著降低开销并精准聚焦目标流量。
二、快速上手方案
- 实时速率与Top连接
- 安装与运行:sudo apt-get install -y iftop;sudo iftop -i eth0(按L切换单位至MB/s,按P暂停/恢复,按q退出)。
- 适用:快速定位“谁在占用带宽”“哪个连接最忙”。
- 轻量脚本化统计
- 安装与运行:sudo apt-get install -y ifstat;ifstat 1 2(每秒刷新,简洁数值输出,便于嵌入脚本做阈值告警)。
- 零依赖系统原生
- 观察总流量:watch -n 1 “cat /proc/net/dev | grep eth0”
- 计算速率(示例脚本):
- while true; do
- read rx1 tx1 < <(grep eth0 /proc/net/dev | awk ‘{print $2,$10}’)
- sleep 1
- read rx2 tx2 < <(grep eth0 /proc/net/dev | awk ‘{print $2,$10}’)
- echo “下载=$(( (rx2-rx1)/1024/1024 )) MB/s 上传=$(( (tx2-tx1)/1024/1024 )) MB/s”
- done
- 适用:无法安装软件的环境,获取接口累计字节并计算MB/s。
- 抓包后离线统计
- 捕获:sudo tcpdump -i eth0 -w capture.pcap ‘tcp or udp’(BPF过滤仅抓取TCP/UDP)。
- 统计:tcpdump -r capture.pcap -nn | awk ‘{bytes+=$NF} END {print “总字节数=” bytes; print “包数=” NR}’;亦可用Wireshark的“统计”菜单做更细分析。
三、进阶统计与自动化
- 按协议/方向的累计统计(tcpdump一行统计)
- 按源/目的IP与方向累计字节与包数:
- tcpdump -r capture.pcap -nn -q |
awk ‘{
proto=$5; src=$3; dst=$5; len=$NF
gsub(/,$/,“”,len)
if(proto ~ /IP/) {
split(src,a,/./); s_ip=a[1]“.“a[2]”.“a[3]”.“a[4]
split(dst,b,/./); d_ip=b[1]”.“b[2]”.“b[3]”.“b[4]
bytes[proto”,“s_ip”->“d_ip]+=len; pkts[proto”,“s_ip”->“d_ip]++
}
}
END {
for(k in bytes) {
split(k,a,”,”)
print a[1], a[2], bytes[k], pkts[k]
}
}’ | sort -k3 -nr | head
- 说明:利用tcpdump的**-q**(精简输出)与**$NF**(长度字段)做轻量聚合;复杂多维统计建议转入脚本语言处理。
- 自动化与定时
- 将抓包与统计封装为脚本,配合cron定时执行(如每5分钟一次),并在脚本中记录开始/结束时间、捕获文件、统计结果;注意cron环境与权限(通常需要sudo),以及日志轮转与磁盘空间管理。
四、工具选型与对比
| 工具 |
统计维度 |
优势 |
典型场景 |
| iftop |
按连接的实时速率 |
直观定位异常IP/端口 |
带宽异常排查 |
| nload |
按接口的实时速率 |
界面简洁、曲线直观 |
日常带宽观测 |
| bmon |
接口速率+历史柱状图 |
看波动规律 |
周期性峰值分析 |
| ifstat |
接口速率(文本) |
轻量、易脚本化 |
阈值告警脚本 |
| vnstat |
接口历史累计 |
长期趋势与报表 |
日/周/月流量审计 |
| tcpdump |
抓包+自定义统计 |
最灵活、可离线 |
取证与深度分析 |
| Wireshark |
协议级详细统计 |
图形化、统计功能强 |
协议问题定位 |
五、实践建议与注意事项
- 权限与安全
- 抓包需要管理员权限(sudo);在生产环境遵循最小权限原则,尽量使用BPF过滤减少采集面,避免影响业务。
- 单位与换算
- 注意区分Mb(兆比特)/MB(兆字节),常用换算为1 MB/s = 8 Mb/s;iftop可用L切换单位,nload可用u切换单位,避免误判带宽是否跑满。
- 性能与存储
- 长时间抓包会产生大文件,建议设置时间/数量上限或环形缓冲(如按时间/文件数分段),并定期归档与分析;对高吞吐接口可结合采样/过滤表达式降低开销。