Ubuntu Sniffer如何实现流量统计
导读:Ubuntu Sniffer流量统计实现指南 一、概念澄清与总体思路 Sniffer通常指基于libpcap的抓包程序(如tcpdump/Wireshark),其“流量统计”常见两类: 按时间窗口的速率统计(如每秒收发速率、峰值、Top...
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
- while true;
do
- 适用:无法安装软件的环境,获取接口累计字节并计算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 -r capture.pcap -nn -q |
- 说明:利用tcpdump的**-q**(精简输出)与**$NF**(长度字段)做轻量聚合;复杂多维统计建议转入脚本语言处理。
- 按源/目的IP与方向累计字节与包数:
- 自动化与定时
- 将抓包与统计封装为脚本,配合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切换单位,避免误判带宽是否跑满。
- 性能与存储
- 长时间抓包会产生大文件,建议设置时间/数量上限或环形缓冲(如按时间/文件数分段),并定期归档与分析;对高吞吐接口可结合采样/过滤表达式降低开销。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Sniffer如何实现流量统计
本文地址: https://pptw.com/jishu/775163.html
