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命令时,需要注意安全和资源消耗等问题,并根据需要选择最适合的工具进行网络流量监控。