iftop 默认不显示端口,需加 -P 参数强制显示源/目标端口及服务名(依赖 /etc/services),配合 -n 可禁用 DNS 解析提升响应速度。

iftop 默认不显示端口,怎么让进程和端口都可见
默认运行 iftop 只显示 IP 和总流量,端口号是隐藏的。关键在于启动时加 -P 参数——它强制显示端口(即源/目标端口),配合 -P 还能识别服务名(如 :ssh、:http)。但注意:端口解析依赖 /etc/services,若自定义端口(如 8080)没在该文件里注册,就只显示数字。
实操建议:
- 用
iftop -P查看带端口的实时连接 - 加
-n禁用 DNS 解析(避免卡顿),再加-P保证端口可见 - 想同时看到进程 PID?
iftop本身不支持;得切到ss -tunlp或lsof -i :端口号补充查进程
为什么 iftop 显示的流量和 netstat/ss 统计对不上
iftop 是基于 libpcap 抓包统计,反映的是网卡驱动层的原始流量(含重传、分片、ARP 等);而 netstat 或 /proc/net/snmp 读取的是内核协议栈收发计数器,已过滤掉底层异常包。两者统计口径不同,差值通常在 5%–20% 之间,尤其在高丢包或大量 TCP 重传时更明显。
常见干扰点:
-
iftop默认按 2 秒刷新,瞬时峰值可能被平滑——用-t -s 1切文本模式并设 1 秒采样,更贴近真实毛流量 - 如果网卡启用了 offloading(如 TSO、GSO),硬件会合并多个 TCP 包发送,
iftop抓到的是合并后的“大包”,但字节数仍是准确的 - 容器或 veth 设备流量:
iftop -f "ip and port 80"可过滤特定端口,但无法区分宿主机 vs 容器 namespace 流量
监控指定端口(如 8080)的实时进出流量
直接用 -f 参数写 BPF 过滤器最可靠。例如只盯 HTTP API 流量:iftop -f "tcp port 8080"。注意语法必须严格符合 libpcap 规则,port 匹配源或目标任一端口,dst port 才限定目标。
实用组合:
- 只看进站流量(别人连你):
iftop -f "tcp dst port 8080" - 排除本机主动发起的连接(专注服务端视角):
iftop -f "tcp dst port 8080 and not src host $(hostname -I | awk '{print $1}')" - 想导出短时数据做分析?
iftop -t -s 5 -L 100 -f "tcp port 8080" > /tmp/8080.log(5 秒、100 行、文本模式)
权限、性能与替代方案的取舍
iftop 需要 cap_net_raw 权限(通常靠 setuid 或 sudo),普通用户直接跑会报 socket: Operation not permitted。但它比 nethogs 轻量,比 iptraf-ng 更专注端口维度。
几个容易被忽略的点:
- 长时间挂后台?别用
nohup iftop &—— 它依赖终端尺寸,断开后会崩溃;改用screen -S iftop iftop -P - 千兆以上网卡 + 全量抓包可能占 5%~10% CPU,此时建议加
-B(字节而非比特显示)+-L 50(限制行数)减负 - 真正需要进程级 + 端口级 + 持久化?
iftop不是最佳选择;应转向ebpf + bcc工具如tcplife或tcpconnect,它们从内核钩子取数,零丢包且带 PID
端口流量不是非得“看见”才叫监控——关键路径上用 iftop -f 快速定位异常端口,再用 ss -i 看重传率、cat /proc/net/nf_conntrack | grep :8080 看连接状态,组合起来才压得住问题。










