iftop 查看流量
创建日期:2015-01-22 18:13 修改日期:2022-03-27 00:12:00

名称

iftop - 在指定的网卡上显示主机流量

用法

iftop -h | [-nNpbBP] [-i interface] [-f filter code] [-F net/mask]

选项

-h 打印使用说明

-n 不对IP进行域名解析

-N 不把端口号解析为服务名称

-p 运行于“混杂”模式,不直接通过指定网卡的流量也可以记录下来

-P 显示端口

-b 不显示流量条

-B 用字节来显示流量

-i interface 监听指定的网卡

-f filter code 用来选择要记录的数据包。因为只记录IP包,所以默认的规则就是:(filter code) and ip (译注:如果filter为:udp,则相当于 udp and ip

-F net/mask 指定一个要进行流量分析的网络。如果指定,iftop只记录从指定网络进出的流量,注意进和出是相对于网络边界来说的,不是相对于指定的网卡。
可以用句点格式或者是位数格式来表示网络掩码,如/255.255.255.0/24

-c config file 指定配置文件。如果没有指定,如果存在~/.iftoprc,则使用~/.iftoprc。配置规则可以参看下面的描述。

显示

在显示的时候,iftop使用整个屏幕来显示网络利用情况。在最上方显示的是一个网络刻度尺,指明一个可视的流量大小。(译注:一般是10M、100M、1000M中的最大值)

主要的部分是一个列表,对于每一对连接,分别显示在2秒、10秒和40秒的间隔中,发送和接收的流量。方向用⇒和⇐来表示。例如:

foo.example.com  bar.example.com 1Kb 500b 100b
               <=                  2Mb 2Mb 2Mb

第一行,显示从foo.example.com到bar.example.com的流量。在2秒内,平均1kbit/s,后面显示的是10秒中流量的一半和40秒中流量的五分之一。在整个发送的过程中,流量都为2Mbit/s。 在实际的显示中,一个图形化的长方形表示10秒内的平均流量。 在实际的分析中,可能会看出,foo对于bar的http请求,充满了整个2Mbit/s的连接。

默认情况下,在连接对列表中,10秒内平均流量最大的那条会显示在最上方。

在底端,显示多个统计信息,包括最后40秒的峰值,总传输流量和在2秒、10秒、40秒内的平均流量。

运行时的命令

源/目标 合计

sd键,用来把同一源或目标的所有流量合计在一起。这一个命令在混杂模式下,或者是在网关机器上是比较有用的。

(译注:可以统计某一IP的所有流量)

显示端口

SD用来显示或关闭端口显示,S用来负责源地址,D用来负责目标地址p则用来显示或关闭端口号的显示。

显示模式(DISPLAY TYPE)

主机之间的通讯有四种显示模式,topif用t键在这四种模式下循环,这四种显示模式依次是:

  1. 用两行显示双向连接,发送和接收的流量分别计算,这是默认的显示方式
  2. 用一行显示接收和接收的总流量
  3. 用一行显示发送的流量
  4. 用一行显示接收的流量

显示排序(DISPLAY ORDER)

在默认的情况下,按照第二列,也就是10s内平均的一半那列排序。可以用1,2,3分别对第1列、第2列、第3列进行排序。用<对源地址进行排序,用>来对目的地址进行排序。

显示过滤(DISPLAY FILTERING)

l键可以输入一个POSIX方式的正规表达式,用来对显示的主机名进行过滤。这对于只想显示指定主机流量的时候很有用。

提醒,这要比过滤代码更晚一些(注1),并且不影响对实际流量的捕捉。显示过滤的时候,不影响下方总量的显示。

(注1:两个地方不明确:过滤代码和later,不明白所指到底是哪一个意思)

暂停/冻结显示(PAUSE DISPLAY / FREEZE ORDER)

P将暂停当前屏幕显示。

o将冻结当前屏幕排序。在默认的情况下,屏幕只显示排在最前头的几个条目,后面可能还有隐藏的条目,用本命令把屏幕排序冻结后,你可以翻到下一屏去查看后面隐藏的条目。

翻屏(SCROLL DISPLAY)

jk是翻屏键,可以在屏幕冻结的时候进行翻屏。

过滤代码(FILTER CODE)

f键允许在iftop运行的时候修改过滤代码,警告:这将会导致无法预料的结果。

配置文件

iftop可以从一个文件中读取配置。如果没有使用-c参数并且存在~/.iftoprc,iftop则尝试在它里面读取配置。配置文件中的选项都会被命令中指定的选项覆盖。

在配置文件中,每行一个配置指令,配置指令是名称和数值对,例如,下面的指令用来设置网卡:

interface: eth0

iftop支持下列指令:

interface: if
指定网卡。

dns-resolution: (yes|no)
决定是不是对IP进行反解DNS

port-resolution: (yes|no)
决定是不是把端口号解析为服务名称。

filter-code: bpf
bfp格式的过滤代码。

show-bars: (yes|no)
是不是显示柱状图。

promiscuous: (yes|no)
把网卡设置为“混杂模式”。

port-display: (off|source-only|destination-only|on)
端口号的显示模式。

hide-source: (yes|no)
隐藏源主机。

hide-destination: (yes|no)
隐藏目标主机。

use-bytes: (yes|no)
用字节表示流量

sort: (2s|10s|40s|source|destination)
设置默认的排序列。

line-display: (two-line|one-line-both|one-line-sent|one-line-received)
设置每条项目的显示模式。

show-totals: (yes|no)
显示每条项目的合计数。

log-scale: (yes|no)
为柱状图使用对数刻度。

max-bandwidth: bw
设置流量的最高刻度,比如“10M”。

net-filter: net/mask
定义检测数据包的IP范围段。

screen-filter: regexp
为屏幕输出定义一个正规规则。

特异情况

(这些是特点,而不是缺陷)

在某些情况下,iftop可能没有得到你所期望的结果。在大多数的情况下,它动作的比较合理,并且我们也相信它是正确的。
当然我们也很高兴地了解到,更合理的参数设置可能会有更好的效果。

合计值不累加

这可能有很多原因。最可能的是:1、使用了屏幕过滤;2、冻结了屏幕显示顺序。这两种情况下,捕获的信息不再显示,但是仍然被累计。
一个不太好理解的错误是:在没有指定-F选项的时候,使用了混杂模式,在这种情况下,双向流量不容易统计。

(译注:下面这段解释了原因,但是没读懂) In this case there is no easy way to assign the direction of traffic between two third parties. For the purposes of the main display this is done in an arbitrary fashion (by ordering of IP addresses), but for the sake of totals all traffic between other hosts is accounted as incoming, because that's what it is from the point of view of your interface. The -F option allows you to specify an arbitrary network boundary, and to show traffic flowing across it.

合计峰值不增加

这是一个特点,而不是缺陷,因为峰值并不需要时刻更新。峰值不会在没有被超过的时候更新。

修改过滤条件,但是它好像不工作

这需要一段时间。过滤条件的改变将会影响自进入以来的时间内所捕获的东西,但是大多数的屏幕显示是基于40s内的数据,
所以在捕获没有完成前一个40s的周期之前,是不会修改过滤条件的。DISPLAY FILTERING是立刻显示,因为它并不影响捕获。

文件

iftop的配置文件

~/.iftoprc

参考资料

https://wiki.freebsdchina.org/cnman/8/iftop