第6章:iftop详解
第6章:iftop详解
6.1 iftop概述
什么是iftop
iftop 是一款实时网络流量监控工具,能够显示网络接口上的流量情况,包括源地址、目标地址、端口和传输速率。
为什么选择iftop
- 实时监控 - 实时显示网络流量
- 连接级别 - 显示每个连接的流量
- 端口显示 - 可显示端口号
- 主机过滤 - 支持过滤特定主机
- 轻量级 - 资源消耗低
iftop vs 其他网络工具
| 特性 | iftop | nload | vnstat | iptraf |
|---|---|---|---|---|
| 实时监控 | ✓ | ✓ | ✗ | ✓ |
| 连接级别 | ✓ | ✗ | ✗ | ✓ |
| 端口显示 | ✓ | ✗ | ✗ | ✓ |
| 历史数据 | ✗ | ✗ | ✓ | ✗ |
| 主机过滤 | ✓ | ✗ | ✗ | ✓ |
| 轻量级 | ✓ | ✓ | ✓ | 中等 |
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
常见端口识别
| 端口 | 服务 | 说明 |
|---|---|---|
| 22 | SSH | 远程登录 |
| 80 | HTTP | Web服务 |
| 443 | HTTPS | 安全Web |
| 3306 | MySQL | 数据库 |
| 5432 | PostgreSQL | 数据库 |
| 6379 | Redis | 缓存 |
| 8080 | HTTP备用 | 代理/应用 |
| 27017 | MongoDB | 数据库 |
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
单位对照:
| 模式 | 显示 | 含义 |
|---|---|---|
| bits | b, Kb, Mb, Gb | 位 |
| bytes | B, 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的使用:
- 安装配置: 安装方法、权限配置、配置文件
- 界面解读: 头部信息、流量显示、底部统计
- 交互命令: 显示控制、排序、过滤
- 端口显示: 端口解析、常见端口识别
- 主机过滤: BPF语法、过滤示例
- 带宽分析: 显示模式、刻度、峰值检测
- 高级功能: 输出文件、批处理、网络统计
- 实战场景: 带宽排查、服务监控、DDoS检测
iftop是网络流量监控的利器,适合实时排查网络问题。
上一章: 第5章:btop详解 下一章: 第7章:nload与vnstat