iftop是唯一能直接输出「IP:端口 ↔ IP:端口」粒度实时流量排序的命令行工具,适合导出文本报表;基础命令为sudo iftop -n -N -P -t -L 50 | head -20,-t启用文本模式便于重定向,-n禁DNS解析防卡顿,-N不转换端口名,-P显示端口,-L限制行数。

用 iftop 实时生成连接级流量报表
iftop 是唯一能直接输出「IP:端口 ↔ IP:端口」粒度实时流量排序的命令行工具,适合导出为文本报表用于快速分析。它不依赖历史数据库,启动即见当前活跃连接的 TX/RX 速率。
- 基础报表命令:
sudo iftop -n -N -P -t -L 50 | head -20——-t启用文本模式,-L 50限制显示最多 50 行,head -20截取前 20 条高流量连接 - 指定网卡更准:
sudo iftop -i eth0 -n -N -P -t -L 100,避免混杂模式下抓到 docker0 或 lo 的干扰流量 - 过滤 HTTP 流量:
sudo iftop -f "port 80 or port 443" -n -N -t,注意-f语法是 libpcap 过滤器,不支持域名或正则,只能写端口或 IP 段 - 常见错误:不加
-n时大量显示unknown host,本质是本地 DNS 超时阻塞刷新;不加-P则端口列为空,无法判断是 SSH 还是 Redis 连接 - 输出字段含义:左列是源地址(
192.168.1.10:22),中间箭头方向表示流向(=>是发送,是接收),右列三个数值分别是 2s/10s/40s 平均速率(单位 KB/s)
用 ss + awk 快速统计连接频次和并发数
当 iftop 因权限不足(如容器内无 root)或 libpcap 被禁用而不可用时,ss 是最轻量、最可靠的兜底方案。它不测带宽,但能暴露高频连接、异常目标 IP 和 ESTABLISHED 连接数——这些往往是带宽占用的间接信号。
- 查当前所有 TCP 连接并按目标 IP 排序:
sudo ss -tun | awk '$1 ~ /ESTAB/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10 - 查某进程(如 PID 1234)的所有连接:
sudo ss -tunap | grep ':1234 ',注意空格防匹配到 PID 子串 - 统计每个源 IP 的并发连接数:
sudo ss -tun | awk '$1 ~ /ESTAB/ {print $4}' | cut -d: -f1 | sort | uniq -c | sort -nr - 关键限制:
ss默认不输出字节数,ss -i可看 socket 内部队列,但无法换算成 Mbps;它只反映连接状态,不能替代 iftop 做带宽排行 - 别漏
sudo:非 root 用户运行ss -tunap时,p字段为空,看不到 PID,也就无法关联进程
用 watch + /proc/net/dev 做零依赖秒级差值报表
如果你连 iftop 都不能装,或者需要脚本化采集原始数据做后续计算,/proc/net/dev 是内核提供的权威计数器源。它不区分连接,但能给出网卡级每秒真实吞吐量,适合生成 CSV 报表或对接监控系统。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 每秒刷新一次并提取 eth0 的 RX/TX 字节数:
watch -n 1 'cat /proc/net/dev | grep eth0 | awk '\''{print \$2, \$10}'\'' ' - 手动算 Mbps:
(当前 RX_bytes - 上次 RX_bytes) / 1 / 125000(除以 125000 是因 1 Mbps ≈ 125000 Bytes/s) - 常见陷阱:输出中第一行是 header(
Inter-|Receive),第二行才是数据;grep eth0可能匹配到eth0:1或vethxxx,建议用awk '/^[[:space:]]*eth0[[:space:]]/{...}'精确匹配 - 该文件只记录累计值,重启清零;若需长期趋势,必须自己存档差值结果,vnstat 就是基于它做的持久化封装
- 别用
ifconfig:它读的是过时的 ioctl 接口,数值可能滞后或不准,/proc/net/dev才是现代内核唯一可信来源
nethogs 不适合做连接报表,但能交叉验证进程真实性
nethogs 按进程聚合流量,不是连接报表工具。但它能帮你确认 iftop 里某个高流量连接到底属于哪个进程——尤其当 ss 查不到 PID 或 lsof 权限受限时。
- 运行
sudo nethogs -t eth0获取文本快照,对比 iftop 中的 IP:端口,看对应进程名是否合理(比如curl或python3) - 常见误判:Chrome 多线程只显示主线程名
chrome,Java 应用可能只显示java,实际带宽来自子线程;此时需结合ps -T -p <pid></pid>查线程 ID - SELinux 或 cgroups v2 可能导致
nethogs报Unable to get pid of process,这不是 bug,是策略限制,换ss + lsof组合更稳 - 容器内无效:
nethogs无法穿透 network namespace,宿主机上看到的 PID 在容器内无意义,此时必须进容器用ss
真正要生成可复用的连接流量报表,核心是明确目的:要实时排序就用 iftop -t,要离线分析就存 /proc/net/dev 差值,要定位进程就补 nethogs 或 lsof。工具链之间不是替代关系,而是互补验证——尤其当看到一个陌生 IP 占用大量带宽时,iftop 给连接,ss 给状态,nethogs 给进程,三者对齐才敢下结论。

















