监控特定端口需区分连接级(用iftop过滤端口)和进程级(用nethogs+ss组合),前者定位“谁连该端口”,后者确认“哪个程序在用该端口”,工具与操作不可混用。

要监控特定端口的网络流量与带宽消耗,关键在于区分“实时连接级”和“进程级”两类需求:前者关注“谁连了这个端口、流量多大”,后者关心“哪个程序在用这个端口、吃了多少带宽”。工具选择和操作方式完全不同,不能混用。
一、按连接查:谁正在访问你的特定端口(比如 80、443、3306)
用 iftop 过滤指定端口,最直接有效。它不依赖进程名,而是抓包分析,适合快速定位异常外联或压测来源。
必须加
-n(禁 DNS 解析)和-i(指定网卡),否则可能卡顿或数据不准:
sudo iftop -n -i eth0 -P -f "port 80"-P强制显示端口号;-f后跟 libpcap 过滤语法,只支持端口、协议、IP 段等基础条件(不支持域名或正则)。-
其他常用端口写法示例:
- HTTPS:
sudo iftop -n -i eth0 -f "port 443" - MySQL:
sudo iftop -n -i eth0 -f "port 3306" - 多端口:
sudo iftop -n -i eth0 -f "port 80 or port 443"
- HTTPS:
界面中看到的
<=和=>分别代表入站/出站方向,右侧三列数值是 2s/10s/40s 平均速率(单位默认为 bits/s,加-B可切为 Bytes/s)。
二、按进程查:哪个程序在监听或使用该端口并产生流量
iftop 只显示 IP+端口,无法告诉你背后是 nginx 还是 python。这时必须用 nethogs + netstat(或 ss)组合确认。
先用 nethogs 查活跃进程(需 sudo):
sudo nethogs eth0
它会列出每个进程的 PID、命令名、sent/received 速率。但注意:只有正在发包/收包的进程才会出现,静默监听的(如刚启动的 httpd)不会显示。再用 ss 或 netstat 查端口归属(无需 root):
sudo ss -tulnp | grep ':80'
输出类似tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6)),直接锁定进程名和 PID。
替代命令:sudo netstat -tulnp | grep ':443'(旧系统适用)。如果想持续观察某进程(如 PID 1234)的实时带宽:
sudo nethogs -p 1234(只监控该 PID)
或配合 watch 轮询:watch -n 2 'sudo nethogs -t -c 1 eth0 | grep nginx'
三、补充技巧:快速验证与排除干扰
- 确保你监控的是正确网卡:用
ip link show或ifconfig确认物理接口名(如 ens33、eth0、docker0),别用 lo(本地环回)。 - 若 iftop 过滤后无数据,检查该端口是否真有流量:
tcpdump -i eth0 port 80 -c 5看能否抓到包。 - 避免误读单位:nload 显示 “12.45” 是 12.45 Mbit/s;iftop
-B模式下才是 MB/s;务必看清楚右上角单位标识。 - 容器或云主机环境常见问题:若 nethogs 报
Unable to create a socket,说明缺 libpcap,CentOS/RHEL 执行sudo dnf install libpcap-devel,Ubuntu 执行sudo apt install libpcap-dev。
不复杂但容易忽略


















