iftop 用于在指定的接口监控网络流量,如果没有指定接口(网卡),它可以在第一个接口,或者搜索一个看起来是连接外部的接口。然后按主机活动连接显示当前带宽。

要使用 iftop 命令监控网络接口的流量,你必须以 root 或者具有 sudo 权限的用户运行 iftop 命令。

在本教程中,我们将说明如何 Linux 使用 iftop 命令监控指定接口的网络流量,查看当前已建立的网络连接的速度等。

iftop 命令

默认情况下,iftop 会解释与它在数据包中找到的地址关联的主机名。这可能会导致大量的流量,并可能导致显示混乱。

你可以使用 iftop 命令的 -n 选项,禁用主机名的解释。如果在正在运行的 iftop 会话中可以按 n 键打开或者关闭主机名的 DNS 解释。

默认情况下,iftop 统计通过过滤器的所有 IP 数据包,并根据数据包穿过接口的方向确定数据包的方向。

使用 -F 选项可以让 iftop 显示进入和离开指定定网络的数据包。 例如,iftop -F 10.0.0.0/255.0.0.0 将分析流入和流出 10.* 段网络的数据包。

iftop 命令详解

sudo iftop

当不指定任何选项与参数运行 iftop 时,iftop 会使用整个屏幕显示网络的带宽用法,显示屏顶部是条形图的对数刻度的视觉指示。

屏幕的主要部分列出已连接主机在 2、10 和 40 秒时间间隔内发送和接收数据的速率。数据流的方向由箭头 <= 和 => 指示。例如:

本地主机名称   已连接的远程主机        2s   10s  40s
myfreax  =>  www.myfreax.com      1Kb  500b 100b
         <=                       2Mb  2Mb  2Mb

在这个示例中,我们可以看到 myfreax 的本地主机与远程主机 www.myfreax.com 2秒前发送的数据速度是 1 kb, 10秒前是 500 b,40秒前100 b。

注意 b 的单位不是字节,是 bit/s 单位的缩写,1 kb 也就是 1 kbit/s,2mb 就是 2 mbit/s。

同样你也就理解 myfreax 主机从 www.myfreax.com 主机接收数据的速度,在 2 秒,10 秒前,40 秒前都是 2mb,也就是速度没有任何变化。

屏幕的底部,显示各种总计,包括过去 40 秒的峰值流量、传输的总流量(过滤后)以及 2 秒、10 秒和 40 秒的平均总传输速率。

Tx 表示发送,Rx 表示接收,cum 表示累计值,Total 表示发送和解释的总和,Rate表示网络速度。例如:

TX:    cum: 400KB      peak:34.8Kb  Rattes: 21kb 32kb 6.6kb
RX:			900KB			 34.8Kb	         3kb 3kb 8kb
Total:		1.30MB		     34.8Kb		     21kb 32kb 6.6kb

在上面的示例中,我们可以看到发送累计值是 400KB,峰值是 34.8 KB, 2 秒、10 秒和 40 秒的平均总传输速率分别是 21kb 32kb 6.6kb。

接收的累计值是 900KB,峰值是 34.8 KB, 2 秒、10 秒和 40 秒的平均总传输速率分别是 3kb 3kb 68kb。

快捷键

当你进入 iftop 会话时,你可以使用以下快捷键,切换 iftop 的显示方式或者按 f 添加过滤器。

  • h:显示帮助菜单
  • n:开启 / 关闭主机名的 DNS 解析,如果可以 iftop 可以将 IP 地址解释为主机名则显示主机的名称,否则显示 IP 地址。
  • N:开启 / 关闭服务名称的解释,例如,本地主机连接远程的主机的 443 端口,iftop 将会在远程主机 IP 地址后面添加服务的名称 www.myfreax.com:https。
  • p:开启 / 关闭目标和源端口的显示
  • P:暂停刷新屏幕,注意:这仅仅暂停主要窗口部分的刷新,屏幕底部的统计值依然自动刷新。
  • s:显示或者隐藏源主机的 IP 或主机名。
  • S:显示 / 关闭源端口。
  • t:切换显示发送和接收流量的三种方式,第一种是仅显示发送的流量,第二种是仅显示接收的流量,同时发送和接收的流量,也就是启动时的默认模式。
  • T:显示 / 关闭发送与接收流量统计,这将会在 2s 10s 40s 速率之前添加一列显示累计值。
  • q:退出 iftop

排序

  •  j / k:分别是向下和向上滚动,当屏幕不足以显示所有连接时。
  • <:通过源名称的排序。
  • >:通过目标名称排序。
  • 1/2/3:通过第一,第二,第三列进行排序。
  • o: 冻结排序方式,由于 iftop 是不断滚动所有连接,关闭 iftop 滚动连接,可以按 o 键。

过滤器

iftop 支持一些过滤器来过滤显示的内容。要使用基于 iftop 的过滤器,可以在 iftop 命令的 -f 选项之后跟一个过滤器表达式,也可以在 iftop 会话中使用 f 键设置过滤器。

iftop 使用 pcap-filter 作为数据包的过滤器,你可以根据 pcap-filter 过滤器语法,编写 iftop 过滤器表达式。

值得一提的在 iftop 会话按 f 键输入的过滤器表达式也可用于在 -f 选项后面设置的表达式。也就是说语法上没有差别。

Net filter> src host 192.168.1.100
#eq
iftop -f "src host 192.168.1.100"

基于 IP 地址过滤

要使用基于 IP 地址的过滤器,可以在 iftop 命令后跟一个基于 IP 的过滤器表达式,如下所示:

iftop -f "src host 192.168.1.100"

上面的命令将仅显示来自 IP 地址为 192.168.1.100 的主机的流量,src host 语法表示设置来源主机。

要使 iftop 仅显示目标地址为 8.8.8.8 的流量,请运行命令  iftop -f "dst host 8.8.8.8"

iftop -f "dst host 8.8.8.8"

除了指定设置目标和源过滤之外,也可以使用 CIDR 格式的 IP 地址,例如:

iftop -f "src net 192.168.0.0/16"

上面的命令将显示源地址在 192.168.0.0/16 网段主机的流量。

基于端口过滤

iftop 可以通过基于端口的过滤器来监控指定端口的网络流量。要使用基于端口的过滤器,可以在 iftop 命令后面加上一个端口过滤器表达式,如下所示:

iftop -f "port 80"

iftop -f "port 80" 命令只显示端口 80 的网络流量,即 HTTP 流量。您还可以使用逗号将多个端口号连接在一起,例如:

iftop -f "port 80,443"

iftop -f "port 80,443" 命令仅显示端口 80 或 443 的网络流量,即 HTTP 或 HTTPS 流量。您还可以使用运算符 NOT 排除特定的端口,例如:

iftop -f "not port 22"

iftop -f "not port 22" 命令将显示除 SSH(端口号22)之外的所有流量。

基于 IP 地址和端口的过滤器

您还可以结合 IP 地址和端口来过滤网络流量,例如:

iftop -f "src host 192.168.1.100 and dst port 80"

iftop -f "src host 192.168.1.100 and dst port 80" 命令仅显示来自 IP 地址 192.168.1.100 并且目标端口为 80 的流量。

结论

iftop 命令是一款强大的网络流量监控工具,可以实时监控网络连接和流量,帮助管理员及时发现和解决网络问题。

同时,iftop 命令也支持多种过滤器和交互式操作,使其更加灵活和易用。在使用iftop命令时,需要注意安全和资源消耗等问题,并根据需要选择最适合的工具进行网络流量监控。