Linux iptraf和iftop:监视,分析网络流量和带宽
可以通过基于任何RRD工具绘制图表来分析和监视整个网络基础结构的网络流量。
但是,在危机期间,监视Linux机器上的流量(传出和传入)成为当务之急。
有很多可用于Linux的开源工具可以完成这项工作。
在这篇文章中,我们将讨论两个这样的工具。
本文中讨论的工具提供了有关Linux中网络接口发送和接收的流量的各种重要信息,这对于查找网络带宽瓶颈非常有用。
这些工具向用户提供的信息如下。
- PID(进程ID)发送最大的网络流量
- 具有高网络带宽使用率的接口
- 每个接口的TCP,UDP,ICMP,IP流量汇总
- Linux中每个接口的数据包计数
- 发送和接收的数据包的错误计数
使用Iftop命令在Linux中进行网络带宽监视
Linux中所有系统管理员常用的命令之一是“ ps”命令。
此命令输出进程表和Linux系统上运行的所有进程的完整详细信息。
另一个具有更多交互界面的过程监控工具是“ top”。
我之所以提到“ ps”和“ top”命令的主要原因是,iftop命令与非常著名的“ top”命令非常相似,唯一的区别是iftop命令为我们提供了完整的网络使用情况统计信息,而不是进程信息。
iftop命令使用的系统库如下。
- Libpcap用于捕获数据包。
- 在终端上进行操作的倾向。
有关iftop命令的注意点
- 它显示每个主机的带宽使用情况
- 默认情况下,在输出中执行主机名解析
- 我们需要以root用户身份运行
- 查看与我们感兴趣的特定网络之间的流量
如何在centos/rhel中安装iftop
如果启用了epel yum存储库,则只需执行“ yum install iftop”即可。
否则,我们可以从iftop下载源程序包tar文件。
只需解压缩tar文件并在iftop目录中运行以下命令即可安装它。
# ./configure # make # make install
iftop命令的用法和示例
只需运行iftop命令将为我们提供类似于以下内容的输出。
12.5kb 25.0kb 37.5kb 50.0kb 62.5kb └───────────────┴───────────────┴───────────────┴───────────────┴─────────────── myvm1.sarath.com => 192.168.159.1 944b 1.02kb 1.46kb <= 160b 160b 200b myvm1.sarath.com => 192.168.159.2 0b 0b 72b <= 0b 0b 149b ──────────────────────────────────────────────────────────────────────────────── TX: cum: 3.05kB peak: 3.22kb rates: 944b 1.02kb 1.53kb RX: 698B 1.48kb 160b 160b 349b TOTAL: 3.74kB 4.70kb 1.08kb 1.18kb 1.87kb
在上面显示的iftop命令的示例输出中,我们可以看到往返于主机“ myvm1”的流量,发送和接收流量的方向分别由“ =>”和“ <=“
分别。
默认情况下,输出从最高使用到最低使用进行排序。
因此,仅从输出看一看就可以确定使用最高流量的主机。
我们看到的最后三列是过去2,10和40秒内带宽使用情况的输出。
输出中要注意的一个主要事实是,它将向我们显示来自第一个网络接口卡的流量。
为了显示我们感兴趣的网络接口卡的流量摘要,我们需要在命令行中通过“ -i”选项传递接口名称,如下所示。
[root@myvm1 ~]# iftop -i eth1
如前所述,默认情况下,iftop将在输出中显示主机名。
如果服务器是高流量服务器,则iftop会为每个ip进行名称解析,这本身会生成大量数据包,这会使输出略有偏离(就像iftop会通过接口对每个数据包进行计数一样) 。
因此从命令行本身抑制主机名解析总是更好的方法,这可以通过以下方法来完成。
[root@myvm1 ~]# iftop -n
使用源端口和目标端口选项始终有助于使用服务器上的源端口查找进程。
我们可以要求iftop以“ SHIFT + s”和“ SHIFT + d”交互显示源端口和目标端口。
12.5kb 25.0kb 37.5kb 50.0kb 62.5kb └───────────────┴───────────────┴───────────────┴───────────────┴─────────────── 192.168.159.128:ssh => 192.168.159.1:50433 1.80kb 2.64kb 2.64kb <= 160b 853b 853b 192.168.159.128:ssh => 192.168.159.1:51021 1.34kb 1.12kb 1.12kb <= 320b 320b 320b
我们可以清楚地看到源端口是“ ssh”,而目标端口是网关服务器上的任意端口。
我们始终可以在Linux中通过lsof命令使用端口来查找进程,如下所示。
[root@myvm1 ~]# lsof -i :111 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME portmap 3861 rpc 3u IPv4 10265 UDP *:sunrpc
iftop输出的最后一行显示了2、10和40秒的已接收和已发送流量(RX和TX),两者的总计。
有关iftop命令行选项的更多详细信息,请参见其手册页。
[root@myvm1 ~]# man iftop [root@myvm1 ~]#
使用iptraf命令在Linux中监视网络流量
与iftop命令相比,Iptraf的输出更加详细。
Iptraf根据交通协议向我们显示交通状况。
它在输出中显示了tcp,udp,icmp,ip流量的总结。
在发送和接收的数据包中找出校验和错误也很方便。
我们可以从iptraf下载源程序包
否则,我们可以从此处获取RPM软件包,并使用“ rpm -ivh”命令进行安装。
只需运行“ iptraf”,我们就会看到一个菜单界面,与下面显示的图片完全一样。
- 选择“ IP流量监控器”的第一个选项将带我们进入一个接口,该接口具有与源端口和目标端口建立的所有ip连接,并实时发送接收的数据包数量。在结果输出中,我们可以使用“ SHIFT + M”选项实时查看数据包和窗口大小
- 选择“常规接口统计信息”将为我们提供有关所有接口上的ip,非ip和错误ip数据包的统计信息,以及每个接口的传输速率
- 选择“详细接口统计信息”将为我们显示每个协议的数据包数量以及校验和错误的传输速率和接收速率等的完整详细信息。输出如下所示。
IPTraf ┌ Statistics for eth0 ─────────────────────────────────────────────────────────┐ │ │ │ Total Total Incoming Incoming Outgoing Outgoing │ │ Packets Bytes Packets Bytes Packets Bytes │ │ Total: 1032 200746 353 22884 679 177862 │ │ IP: 1032 184348 353 15992 679 168356 │ │ TCP: 1032 184348 353 15992 679 168356 │ │ UDP: 0 0 0 0 0 0 │ │ ICMP: 0 0 0 0 0 0 │ │ Other IP: 0 0 0 0 0 0 │ │ Non-IP: 0 0 0 0 0 0 │ │ │ │ │ │ Total rates: 47.0 kbits/sec Broadcast packets: 0 │ │ 31.2 packets/sec Broadcast bytes: 0 │ │ │ │ Incoming rates: 5.6 kbits/sec │ │ 10.6 packets/sec │ │ IP checksum errors: 0 │ │ Outgoing rates: 41.4 kbits/sec │ │ 20.6 packets/sec │ └ Elapsed time: 0:00 ────────────────────────────────────────────────────────┘
- 选择选项“统计数据细分”将使我们能够基于“数据包大小”以及“ TCP和UDP端口”获得排序的输出。这是一种确定我们是否受到攻击的好方法,因为在大多数情况下,攻击者会发送大量具有大数据包大小的数据包。
可以从iptraf手册页中找到iptraf命令行选项的完整列表。
[root@myvm1 ~]# man iptraf [root@myvm1 ~]#