iftop 是 Linux 下的流量监控工具,可以用来观察实时的网络连接和网络流量情况。网上有很多介绍使用的相关文章,但是我发现很难找到原文,有些文章对它的使用的解释很生硬。所以,我今天将自己理解的用法整理出来,分享给需要的同学。如有不对之处,还请各位不吝指出。
显示结果
在命令行中执行之后,会显示抓取的网络连接列表,以及对应的网络流量统计。每个连接显示结果类似:
foo.example.com => bar.example.com 1Kb 500b 100b
<= 2Mb 2Mb 2Mb
两行分别表示不同的数据传输方向,对于第一行而言,第一列是源地址,第二列是目的地址,最后三列分别是最近 2 秒、10 秒、40 秒发送的平均网络流量。默认情况下,是按十秒内的平均网络流量排序的。
底部会显示一些全局的统计数据,peek 是指峰值情况,cumm 是从运行至今的累计情况,而 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
以上介绍的是默认的显示结果,同 top 一样,也提供不少快捷键来改变默认的显示行为。
快捷键
在显示结果中,按下 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: 退出;
使用例子
现在我们要找出系统中下载最猛的连接,假设网卡为 eth0(私网):
# sudo iftop -i eth0 -nP
通过执行一下操作,切换到最适合观察的显示结果:
按下 t 切换显示模式,切换到只显示接收流量(Received traffic only);
按下 T 显示每个连接的累计总流量(Show cummulative totals);
按下 3 按最近 40 秒的平均网络流量排序(Sort by col 3);
按下 B 切换 bar graph 显示为最近 40 秒的平均网络流量(Bars show 40s average),便于观察;
现在,观察一段时间后,基本上可以看出下载最猛的连接了把 🙂
参考链接