iftop本身不显示进程名,需先用iftop -p定位高流量ip:端口,再通过sudo ss -tulnp或sudo lsof -i :端口反查对应进程。

iftop 本身不显示进程名,别指望它直接告诉你哪个进程在发包
这是最常被误解的一点:iftop 基于 libpcap 抓包,只看到 IP + 端口 + 流量,不查 /proc 或内核 socket 表,所以 iftop 界面里永远没有 PID、进程名或用户字段。强行盯着它找“谁在传文件”,只会浪费时间。
正确做法是分两步走:先用 iftop 定位高流量的 IP:端口,再用其他工具反查该端口归属的进程。这个流程不能跳过,也没有捷径。
用 iftop -P 配合 ss 或 lsof 查端口对应的进程
启动 iftop 时必须加 -P(大写),否则端口号不显示,后续无法关联进程。推荐组合命令:
-
sudo iftop -n -P -i eth0:禁 DNS 解析(-n)、显示端口(-P)、指定网卡(-i eth0,用ip link确认实际名称) - 看到某行流量异常(比如
192.168.1.100 => 10.0.0.5:52432),记下远端 IP 和本地端口52432 - 新开终端执行:
sudo ss -tulnp | grep ':52432$'或sudo lsof -i :52432
注意:ss 更轻量、输出更干净;lsof 在某些容器环境可能未安装。两者都需 root 权限,否则看不到其他用户的进程。
过滤语法写错会导致 iftop 无输出或报 pcap_compile 错误
想快速聚焦某个端口?别直接写 iftop -f "port 80" 就完事。常见坑:
-
-f后的表达式必须符合 pcap filter 语法,port是小写,数字不能加引号,空格不能省——port 80对,Port 80或port "80"都错 - 多个条件用
and连接,不是&&或AND:正确写法是host 192.168.1.100 and port 22 - 不确定表达式是否合法?先用
tcpdump -i eth0 -c 1 -f "port 80"测试,成功返回一个包就说明语法过关
权限不足是 iftop 启动失败的头号原因
运行 iftop 报 no interface found 或只显示 lo 流量,基本就是权限问题:
- 最简单解法:
sudo iftop -n -P - 不想每次输密码?给二进制加能力:
sudo setcap cap_net_raw+ep $(which iftop)(路径务必用which iftop确认) - 某些 Alpine 或最小化镜像缺
libpcap.so.1,报error while loading shared libraries,装对应包即可,如apk add libpcap或apt install libpcap0.8
真正麻烦的是容器场景:默认没 cap_net_raw,又不能随便加 capability,这时候 iftop 基本不可用,得换 nethogs 或直接进宿主机查。











