1. 写在前面
本文主要介绍 Linux iftop(Interface TOP)
命令:iftop
是一款小巧、免费且功能强大的网卡实时流量监控工具。监控指定网卡的实时流量、端口连接信息、反向解析 IP 等,还可以精确显示本机网络流量及网络内各主机和本机相互通信的流量集合,非常适合于监控代理服务器或路由器的网络流量。缺点:就是无报表功能,必须以root身份才能运行。
关注 公众号 获取最新博文: 滑翔的纸飞机
2. iftop 命令
2.1 安装
- 基于 RedHat 的 Linux(版本 8 或以下)
yum install epel-release
yum install iftop
- 基于 RedHat 的 Linux
sudo dnf install epel-release
sudo dnf install iftop
- Debian 或 Ubuntu Linux
sudo apt install iftop
2.2 常用参数
基本语法:
iftop -h | [-nNpblBP] [-i interface] [-f filter code] [-F net/mask] [-G net6/mask6]
常用参数:
参数 | 描述 |
---|---|
-h | 显示简要的帮助信息 |
-n | 不进行 DNS 解析,直接 IP 显示 |
-N | 仅显示端口号,不显示服务对应名称 |
-p | 以混杂模式运行,因此不直接通过指定接口的流量也会被计算在内 |
-P | 显示主机和端口信息 |
-l | 显示和统计向链路本地 IPv6 地址寻址或从链路本地 IPv6 地址寻址的数据报。 默认情况下不显示该地址类别 |
-b | 不显示表示流量的图形条 |
-m | 窗口顶部输出流量刻度(“K”、"M "或 “G”),分 5 个大段显示 如:# iftop -m 100M |
-B | 以 bytes/sec 为单位显示网卡流量,默认是 bits/sec |
-i | 指定网卡, 如:# iftop -i eth1 |
-f | 使用过滤码选择要计数的数据包。只计算IP数据包,因此指定的代码被评估为(过滤代码)和IP 如 iftop -f filter code |
-F -net/mask | 显示特定网段的网卡进出流量(IPv4) 如: iftop -F 192.168.85.0/24 |
-G net6/mask6 | 显示特定网段的网卡进出流量(IPv6) |
-c | 指定可选的配置文件,如:iftop -c config file |
-t | 使用不带 ncurses 的文本界面 |
2.3 窗口说明
在默认情况下 iftop
显示系统第一块网卡的流量信息,如果要显示指定网卡信息,可通过 -i
参数实现。
例如:执行 iftop -P -i ens3
命令
- 第一部分
iftop
命令输出如上图所示,最上面红框为第一部分,此信息为流量刻度,主要用于显示网卡带宽流量。
- 第二部分
上图,中间黄色方框即为第二部分,信息分为三列显示:
(1)第1、2列:显示当前哪些 IP 地址与当前主机哪些服务进行网络连接。其中第2列 =>
代表发送数据,<=
代表接收数据,我们可以根据这个箭头符号可以快速定位 IP 服务之间通信情况;
(2)第3大列分三小列显示,表示各网络连接 2 秒内、10 秒内和 40 秒内的平均流量值。
另外,每条记录还有一个白色背景流量条形图,可动态展示当前该网络连接流量大小,参照第一部分流量刻度,可以对比各个网络连接流量大小,定位流量问题。例如:哪个服务占用网络带宽最多。
-
第三部分
上图,位于底部方框,分 4部分显示:
第 1 部分:
TX
表示发送数据;
RX
表示接收数据;
TOTAL
表示发送和接收全部流量;
第 2 部分:
cum
列: 表示从运行 iftop 到目前为止发送、接收和总数据流量;第 3 部分:
peak
列:表示发送、接收以及总的流量峰值;第 4 部分:
rates
列:表示过去 2s、10s、40s 平均流量值;
2.4 交互界面
iftop
实时网络监控窗口,可以进行交互式操作,类似 top
命令,主要对输出信息进行过滤、统计,便于将更清晰的信息显示出来。
查看交互命令:可在上图所示窗口中,键入 h
即可进入交互选项界面,如下图所示:
交互参数分为 4 块:”Host display“、”General“、”Port display“和”Sorting"。相关参数的含义如下表所示:
Host display:
参数 | 描述 |
---|---|
n | 输出结果以IP或主机名的方式显示 |
s | 可切换是否显示源主机信息 |
d | 可切换是否显示远端目标主机信息 |
t | 可切换 iftop 显示格式,连续按键依次显示:两行显示发送、接收流量,一行显示发送、接收流量;只显示发送流量/接收流量 |
General:
参数 | 描述 |
---|---|
P | 可切换暂停/继续显示 |
h | 可在交互参数界面/状态输出界面之间来回切换 |
b | 可切换是否显示平均流量图形条 |
B | 可切换显示2秒、10秒、40秒内的平均流量 |
T | 可切换是否显示每个连接的总流量 |
j/k | 按j 键或k 键可以向上或向下滚动屏幕显示当前连接信息 |
l | 可打开iftop 输出过滤功能,例如:输入要过滤 IP地址,回车后,仅显示 IP 相关的流量信息 |
L | 可切换显示流量刻度范围,同时,流量图形条会根据刻度变化 |
q | 可退出iftop 流量监控界面 |
Port display:
参数 | 描述 |
---|---|
N | 可切换显示端口号/端口号对应服务名称 |
S | 可切换是否显示本地源主机的端口信息 |
D | 可切换是否显示远端目标主机的端口信息 |
p | 可切换是否显示端口信息 |
Sorting:
参数 | 描述 |
---|---|
1/2/3 | 根据 2 秒、10 秒、40 秒的平均网络流量排序 |
< | 可根据左边的本地主机名或IP地址进行排序 |
> | 可根据远端目标主机的主机名或IP地址进行排序 |
o | 可切换是否固定显示当前的连接 |
2.5 使用命令示例
(1) 显示网卡的基本带宽使用情况
root@dev:~# iftop # 默认网卡
root@dev:~# iftop -i ens3 # 指定 ens3 网卡
(2) 显示 IP,不进行 DNS 解析
root@dev:~# iftop -i ens3 -n
与上图相比,显示 IP 地址,不进行 DNS 解析。
(3) 只显示连接端口号,不显示端口对应的服务名称
‘’’
root@dev:~# iftop -i ens3 -N
‘’’
(4) 不显示流量图形条
(5) 使用不带 ncurses
的文本界面
(6) 其他更多参数示例
- 按源地址对输出排序:
root@dev:~# iftop -o source
- 按目的地地址对输出排序:
root@dev:~# iftop -o destination
- 指定打印行数
root@dev:~# iftop -i ens3 -L 2
- 显示端口号
root@dev:~# iftop -i ens3 -n -P
- 以
byte
为单位显示网卡流量,默认是bit
root@dev:~# iftop -i ens3 -n -B
- 显示流量进度条
root@dev:~# iftop -i ens3 -n
进入界面后按下大写 L
- 显示每个连接的总流量
root@dev:~# iftop -i ens3 -n
进入界面后按下大写 T
- 显示指定 ip
10.20.0.6
的流量
root@dev:~# iftop -i ens3 -n
进入界面后按下小写 l
后,再输入 10.20.0.6
并回车
- 显示帮助信息
root@dev:~# iftop -h
iftop: display bandwidth usage on an interface by host
Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code]
[-F net/mask] [-G net6/mask6]
-h display this message
-n don't do hostname lookups
-N don't convert port numbers to services
-p run in promiscuous mode (show traffic between other
hosts on the same network segment)
-b don't display a bar graph of traffic
... ...
2.6 案例:查找最耗费流量的 IP 和端口号
(1)进入 iftop
界面;
(2)键入大写 L
显示流量刻度;
(3)键入大写 T
显示总量;
(4)键入 3
,根据最近 40s
平均值统计排序;
(5)键入小写 t
,发送和接受以一行显示;
(6)多按几次大写 B
,切换查看最近 2s、10s、40s 的统计;
(7)图中的 10.20.0.6
就是我们找到的流量用得最多的 IP;
(8)筛选指定 IP 10.20.0.6
,按下小写 l
, 输入10.20.0.6
,回车后生效;
(9)找到这个 IP 哪个端口流量用得最多,按下 p
, 根据端口号显示;