iftop 是 Linux 下的流量监控工具,可以用来观察实时的网络连接和网络流量情况。网上有很多介绍 iftop 使用的相关文章,但是我发现很难找到原文,有些文章对它的使用的解释很生硬。所以,我今天将自己理解的 iftop 用法整理出来,分享给需要的同学。如有不对之处,还请各位不吝指出。

显示结果

在命令行中执行 iftop 之后,会显示抓取的网络连接列表,以及对应的网络流量统计。每个连接显示结果类似:

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

两行分别表示不同的数据传输方向,对于第一行而言,第一列是源地址,第二列是目的地址,最后三列分别是最近 2 秒、10 秒、40 秒发送的平均网络流量。默认情况下,是按十秒内的平均网络流量排序的。

底部会显示一些全局的统计数据,peek 是指峰值情况,cumm 是从 iftop 运行至今的累计情况,而 rates 表示最近 2 秒、10 秒、40 秒内总共接收或者发送的平均网络流量。

TX:  cumm:   143MB   peak:   10.5Mb    rates:   1.03Mb  1.54Mb  2.10Mb
RX:          12.7GB          228Mb              189Mb   191Mb   183Mb
TOTAL:       12.9GB          229Mb              190Mb   193Mb   185MbW

以上介绍的时默认的显示结果,iftop 同 top 一样,也提供不少快捷键来改变默认的显示行为。

快捷键

在 iftop 显示结果中,按下 h 或者 ? 可以切换显示帮助,下面介绍一些常见的快捷键:

1. 主机显示

n: 切换是否解析主机名,你可以选择显示域名还是 IP 地址;
s/d: 切换是否显示源主机或者目的主机;
t: 切换主机接收和发送显示的模式:两行显示、一行显示、只显示发送流量、只显示发送流量;

2. 端口显示

N: 切换显示服务名称还是端口号,例如 ssh 或者 22;
S/D:切换是否显示源主机端口或者目的主机端口;
p:切换是否显示端口号;

3. 排序显示

1/2/3:根据最近 2 秒、10 秒、40 秒的平均网络流量排序;
<:根据源主机地址排序;
>:根据目的主机地址排序;
o:固定显示当前连接,用来观察当前连接的流量情况,避免刷新后连接顺序变化;

4. 其他

P:暂停刷新;
h/?:切换显示帮助;
b:切换是否显示 bar graph;
B:切换 bar graph 显示为最近 2 秒、10 秒、40 秒的平均网络流量;
T: 切换显示每个连接的累计总流量,类似前面提到的 cumm,不过是针对单个连接的;
j/k:垂直滚动显示连接;
q: 退出 iftop;

使用例子

现在我们要找出系统中下载最猛的连接,首先运行 iftop 命令,假设网卡为 eth0(私网):

# sudo iftop -i eth0 -nP

通过执行一下操作,切换到最适合观察的显示结果:

  1. 按下 t 切换显示模式,切换到只显示接收流量(Received traffic only);
  2. 按下 T 显示每个连接的累计总流量(Show cummulative totals);
  3. 按下 3 按最近 40 秒的平均网络流量排序(Sort by col 3);
  4. 按下 B 切换 bar graph 显示为最近 40 秒的平均网络流量(Bars show 40s average),便于观察;

现在,观察一段时间后,基本上可以看出下载最猛的连接了把 🙂

参考链接

1. http://jaseywang.me/2011/12/19/iftop/
2. http://www.vpser.net/manage/iftop.html