强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

系统监控工具指南 / 第6章:iftop详解

第6章:iftop详解

6.1 iftop概述

什么是iftop

iftop 是一款实时网络流量监控工具,能够显示网络接口上的流量情况,包括源地址、目标地址、端口和传输速率。

为什么选择iftop

  1. 实时监控 - 实时显示网络流量
  2. 连接级别 - 显示每个连接的流量
  3. 端口显示 - 可显示端口号
  4. 主机过滤 - 支持过滤特定主机
  5. 轻量级 - 资源消耗低

iftop vs 其他网络工具

特性iftopnloadvnstatiptraf
实时监控
连接级别
端口显示
历史数据
主机过滤
轻量级中等

6.2 安装与配置

安装方法

# Debian/Ubuntu
sudo apt update
sudo apt install iftop

# CentOS/RHEL
sudo yum install epel-release
sudo yum install iftop

# Fedora
sudo dnf install iftop

# Arch Linux
sudo pacman -S iftop

# macOS
brew install iftop

验证安装

iftop --version
# iftop version 1.0pre4

权限配置

# iftop需要root权限或CAP_NET_RAW能力

# 方法1:使用sudo
sudo iftop

# 方法2:设置capabilities
sudo setcap cap_net_raw+ep /usr/sbin/iftop

# 普通用户可直接运行
iftop

配置文件

# 全局配置
/etc/iftop

# 用户配置
~/.iftoprc

6.3 基本使用

启动iftop

# 监控默认接口
sudo iftop

# 监控指定接口
sudo iftop -i eth0

# 监控所有接口
sudo iftop -i any

# 不解析主机名(更快)
sudo iftop -n

# 显示端口
sudo iftop -P

界面解读

interface: eth0
IP address is: 192.168.1.100
MAC address is: 00:11:22:33:44:55

                12.5Mb          25.0Mb          37.5Mb          50.0Mb
├───────────────┴───────────────┴───────────────┴───────────────┤
server1.example.com                         => client1.example.com
                                                5.00Mb  2.50Mb  1.25Mb
                                            <=  1.25Mb  625Kb   312Kb
server1.example.com                         => client2.example.com
                                                2.50Mb  1.25Mb  625Kb
                                            <=  625Kb   312Kb   156Kb

───────────────────────────────────────────────────────────────────
TX:             cum:   45.0MB   peak:   12.5Mb                     rates:   7.50Mb  3.75Mb  1.88Mb
RX:                    22.5MB           6.25Mb                             3.75Mb  1.88Mb   938Kb
TOTAL:                 67.5MB          18.8Mb                            11.3Mb   5.63Mb  2.81Mb

头部信息

第一行:接口信息

  • interface: eth0 - 监控的网络接口
  • IP address - 接口IP地址
  • MAC address - 接口MAC地址

刻度条:带宽刻度

  • 显示当前带宽范围
  • 动态调整刻度

流量显示

格式

源主机 => 目标主机
          2s平均  10s平均  40s平均

箭头含义

  • => - 发送流量(TX)
  • <= - 接收流量(RX)

底部统计

字段含义
TX发送统计
RX接收统计
TOTAL总流量
cum累计流量
peak峰值速率
rates当前速率(2s/10s/40s平均)

6.4 交互命令

显示控制

按键功能
h显示帮助
n切换DNS解析
s切换源显示
d切换目标显示
S切换端口显示
N切换端口解析
D切换目标端口
p显示端口
P暂停显示

排序控制

按键功能
<按源排序
>按目标排序
o切换排序
1/2/3按2s/10s/40s排序

过滤控制

按键功能
f编辑过滤器
l设置屏幕过滤
L切换对数刻度
j/k上下滚动

其他控制

按键功能
q退出
P暂停
t切换显示模式
T显示累计
1/2/3切换速率显示

6.5 端口显示

显示端口

# 启动时显示端口
sudo iftop -P

# 运行时切换
# 按P显示端口

端口显示示例

server1.example.com:80      => client1.example.com:54321
                              5.00Mb  2.50Mb  1.25Mb
                          <=  1.25Mb  625Kb   312Kb

server1.example.com:443     => client2.example.com:12345
                              2.50Mb  1.25Mb  625Kb
                          <=  625Kb   312Kb   156Kb

端口解析

# 显示端口号(不解析服务名)
sudo iftop -n -P

# 显示服务名
sudo iftop -P
# 会将80显示为http,443显示为https

常见端口识别

端口服务说明
22SSH远程登录
80HTTPWeb服务
443HTTPS安全Web
3306MySQL数据库
5432PostgreSQL数据库
6379Redis缓存
8080HTTP备用代理/应用
27017MongoDB数据库

6.6 主机过滤

命令行过滤

# 过滤特定主机
sudo iftop -f "host 192.168.1.100"

# 过滤特定网段
sudo iftop -f "net 192.168.1.0/24"

# 过滤特定端口
sudo iftop -f "port 80"

# 组合过滤
sudo iftop -f "host 192.168.1.100 and port 80"

# 排除特定主机
sudo iftop -f "not host 192.168.1.100"

运行时过滤

# 按f进入过滤编辑模式
# 输入过滤表达式
# 按Enter确认

BPF过滤语法

iftop使用BPF(Berkeley Packet Filter)语法:

主机过滤

host 192.168.1.100          # 特定主机
src host 192.168.1.100      # 源主机
dst host 192.168.1.100      # 目标主机
net 192.168.1.0/24          # 网段

端口过滤

port 80                     # 特定端口
src port 80                 # 源端口
dst port 80                 # 目标端口
portrange 80-443            # 端口范围

协议过滤

tcp                         # TCP协议
udp                         # UDP协议
icmp                        # ICMP协议

组合过滤

host 192.168.1.100 and port 80           # 与
host 192.168.1.100 or host 192.168.1.200 # 或
not host 192.168.1.100                    # 非

过滤示例

# 只看Web流量
sudo iftop -f "port 80 or port 443"

# 只看特定服务器
sudo iftop -f "host 10.0.0.1"

# 只看外部流量
sudo iftop -f "not net 192.168.0.0/16"

# 只看数据库流量
sudo iftop -f "port 3306 or port 5432"

# 只看SSH流量
sudo iftop -f "port 22"

6.7 带宽分析

带宽显示模式

# 位模式(bits)
sudo iftop -B

# 字节模式(bytes)- 默认
sudo iftop

单位对照

模式显示含义
bitsb, Kb, Mb, Gb
bytesB, KB, MB, GB字节

刻度显示

# 线性刻度
sudo iftop

# 对数刻度
# 运行时按L

峰值检测

# 查看峰值
# 底部显示peak值

# 重置统计
# 按r重置

速率显示

# 2秒平均
# 按1

# 10秒平均(默认)
# 按2

# 40秒平均
# 按3

# 累计流量
# 按T

6.8 高级功能

6.8.1 输出到文件

# 文本输出
sudo iftop -t -s 60 > iftop_output.txt

# -t: 文本模式
# -s 60: 运行60秒

# 输出到文件(持续运行)
sudo iftop -t | tee iftop_output.txt

6.8.2 批处理模式

# 运行一次并退出
sudo iftop -t -n -s 10

# 记录60秒
sudo iftop -t -s 60 > /tmp/iftop_$(date +%Y%m%d_%H%M%S).txt

6.8.3 网络统计

# 查看详细统计
# 底部显示:
# TX: 发送统计
# RX: 接收统计
# TOTAL: 总流量

# 按T查看累计流量

6.8.4 主机名解析

# 禁用DNS解析(更快)
sudo iftop -n

# 显示端口号(不解析服务名)
sudo iftop -N

6.9 实战场景

场景1:排查带宽占用

问题:服务器带宽突然跑满

# 1. 查看整体流量
sudo iftop -i eth0

# 2. 找出流量最大的连接
# 按>按目标排序

# 3. 查看具体是哪个进程
sudo netstat -tulnp | grep <端口>

# 4. 或使用lsof
sudo lsof -i :<端口>

场景2:监控特定服务

需求:监控Web服务流量

# 只看HTTP/HTTPS流量
sudo iftop -f "port 80 or port 443" -P

# 查看每个连接的流量
# 可以看到哪个客户端流量最大

场景3:分析外部访问

需求:分析外部IP访问情况

# 只看外部流量(排除内网)
sudo iftop -f "not net 192.168.0.0/16 and not net 10.0.0.0/8"

# 查看哪些外部IP流量大

场景4:监控数据库连接

需求:监控数据库流量

# 监控MySQL流量
sudo iftop -f "port 3306" -P

# 监控PostgreSQL流量
sudo iftop -f "port 5432" -P

# 监控Redis流量
sudo iftop -f "port 6379" -P

场景5:流量记录

需求:记录一段时间的网络流量

# 记录5分钟流量
sudo iftop -t -s 300 > /tmp/iftop_5min.txt

# 持续记录(每小时一个文件)
while true; do
    sudo iftop -t -s 3600 > /tmp/iftop_$(date +%Y%m%d_%H).txt
done

场景6:DDoS检测

需求:检测异常流量

# 查看流量峰值
sudo iftop -i eth0

# 检查大量连接的IP
sudo iftop -n | awk '{print $1}' | sort | uniq -c | sort -rn

# 使用netstat检查连接数
netstat -an | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn

6.10 配置文件

用户配置文件

# ~/.iftoprc
# 配置示例

配置选项

# 接口
interface: eth0

# 不解析DNS
dns-resolution: no

# 显示端口
port-display: yes

# 端口解析
port-resolution: yes

# 刻度
use-log-scale: no

# 单位
use-bit-rate: no

# 过滤器
filter: "not port 22"

# 排序
sort: 2s

全局配置

# /etc/iftop
# 系统级配置

6.11 命令行参数

完整参数列表

iftop -h

# 常用参数
iftop -i eth0        # 指定接口
iftop -n             # 不解析DNS
iftop -N             # 不解析端口
iftop -P             # 显示端口
iftop -B             # 显示位
iftop -b             # 显示刻度
iftop -f "filter"    # 过滤器
iftop -F net/mask    # 过滤网段
iftop -t             # 文本模式
iftop -s seconds     # 运行时间
iftop -L number      # 限制行数

参数详解

参数功能示例
-i指定接口-i eth0
-n禁用DNS解析-n
-N禁用端口解析-N
-P显示端口-P
-B以位显示-B
-b显示刻度-b
-f过滤器-f "port 80"
-F过滤网段-F 192.168.1.0/24
-t文本模式-t
-s运行时间-s 60
-L限制行数-L 10

6.12 故障排查

问题1:权限不足

# 错误信息
# iftop: SIOCGIFADDR: eth0: No such device

# 解决方案
sudo iftop

# 或设置capabilities
sudo setcap cap_net_raw+ep /usr/sbin/iftop

问题2:找不到接口

# 查看可用接口
ip link show

# 或
ifconfig -a

# 使用正确接口名
sudo iftop -i ens33

问题3:显示为空

# 可能原因:没有流量

# 检查接口状态
ip link show eth0

# 生成测试流量
ping 8.8.8.8

# 再查看iftop
sudo iftop -i eth0

问题4:DNS解析慢

# 禁用DNS解析
sudo iftop -n

# 或修改/etc/hosts
# 添加常用主机映射

6.13 性能优化

减少资源消耗

# 禁用DNS解析
sudo iftop -n

# 限制显示行数
sudo iftop -L 20

# 使用过滤器减少数据
sudo iftop -f "port 80"

高频监控

# 快速输出
sudo iftop -t -n -s 1 > /tmp/iftop_quick.txt

# 循环监控
while true; do
    sudo iftop -t -n -s 60 > /tmp/iftop_$(date +%H%M%S).txt
    sleep 1
done

6.14 与其他工具集成

iftop + iptables

# 使用iftop找出异常流量
sudo iftop -i eth0

# 使用iptables封禁异常IP
sudo iptables -A INPUT -s 异常IP -j DROP

iftop + tcpdump

# 使用iftop监控
sudo iftop -i eth0

# 使用tcpdump抓包分析
sudo tcpdump -i eth0 -w capture.pcap host 异常IP

iftop + vnstat

# iftop实时监控
sudo iftop -i eth0

# vnstat记录历史
vnstat -i eth0 -d

6.15 扩展阅读

6.16 快捷命令参考

# 常用命令
sudo iftop                     # 默认监控
sudo iftop -i eth0             # 指定接口
sudo iftop -n                  # 不解析DNS
sudo iftop -P                  # 显示端口
sudo iftop -B                  # 以位显示
sudo iftop -f "port 80"        # 过滤端口
sudo iftop -f "host 1.2.3.4"   # 过滤主机
sudo iftop -t -s 60            # 文本模式60秒

# 常用交互键
n  # 切换DNS解析
P  # 切换端口显示
B  # 切换位/字节
L  # 对数刻度
<  # 按源排序
>  # 按目标排序
f  # 编辑过滤器
q  # 退出

6.17 本章小结

本章详细介绍了iftop的使用:

  1. 安装配置: 安装方法、权限配置、配置文件
  2. 界面解读: 头部信息、流量显示、底部统计
  3. 交互命令: 显示控制、排序、过滤
  4. 端口显示: 端口解析、常见端口识别
  5. 主机过滤: BPF语法、过滤示例
  6. 带宽分析: 显示模式、刻度、峰值检测
  7. 高级功能: 输出文件、批处理、网络统计
  8. 实战场景: 带宽排查、服务监控、DDoS检测

iftop是网络流量监控的利器,适合实时排查网络问题。


上一章: 第5章:btop详解 下一章: 第7章:nload与vnstat