iptables最适合获取特定端口的累计精确流量,通过添加input和output计数规则并执行iptables -l -v -n -x查看;实时监控则推荐iftop或nethogs,前者可过滤端口、后者按进程显示带宽。

要查看 Linux 中特定端口的进出流量统计,核心思路是区分「累计精确值」和「实时动态值」两类需求。iptables 适合长期、精准计数;iftop、nethogs 等工具更适合快速定位当前谁在用、用了多少。
用 iptables 统计端口的累计流量
这是最可靠、内核级的统计方式,适用于需要准确字节数和包数的场景(比如计费、审计或故障复盘)。
- 添加两条不干扰业务的计数规则,例如统计 TCP 8080 端口:
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 8080 -j ACCEPT
- 执行后,运行 sudo iptables -L -v -n -x 查看规则匹配的 packets 和 bytes 字段,即为该端口的累计收发量
- 若系统重启后规则丢失,Debian/Ubuntu 需保存:sudo iptables-persistent save;RHEL/CentOS 用 service iptables save 或写入 /etc/sysconfig/iptables
用 iftop 实时监控端口流量
适合排查“此刻谁在连 8080?流量多大?”,界面直观,支持过滤和端口显示。
- 安装后以 root 运行:sudo iftop -P -N -f "tcp port 8080"(-P 显示端口名,-N 强制显示数字端口,-f 过滤只看 8080 流量)
- 想专注服务端视角(只看别人连你):sudo iftop -f "tcp dst port 8080"
- 加 -B 以字节(Bytes)为单位显示,更符合直觉;加 -n 禁用 DNS 解析,避免卡顿
查端口对应进程并辅助验证
iftop 不显示进程 PID,但可配合其他命令交叉确认:
- 查监听 8080 的进程:sudo ss -tunlp | grep ':8080' 或 sudo lsof -i :8080
- 查当前所有活跃连接中涉及 8080 的:sudo ss -t state established '( dport = :8080 or sport = :8080 )'
- 若需按进程维度看带宽,直接运行 sudo nethogs,它会列出每个进程的实时上下行速率
注意几个常见偏差点
不同工具数值可能不一致,不是故障,而是统计层级不同:
- iftop 基于 libpcap 抓包,含重传、分片、ARP 包;而 /proc/net/dev 或 ip -s link 是内核协议栈入口统计,已过滤异常帧
- 差值通常在 5%–20%,高丢包或大量重传时更明显
- 容器环境里,iftop 默认看到的是宿主机 veth 流量,无法自动区分命名空间;如需隔离监控,得进对应 netns 执行或用 cgroup+tc 方案











