Linux 網(wǎng)絡(luò)流量監(jiān)控利器 iftop 中文入門指南
本文轉(zhuǎn)載自:「 博客園 」
原文:http://t.cn/A6tM3oLg
iftop 是什么
在 Linux 系統(tǒng)下即時(shí)監(jiān)控服務(wù)器的網(wǎng)絡(luò)帶寬使用情況,有很多工具,比如 iptraf、nethogs 等等,但是推薦使用小巧但功能很強(qiáng)大的 iftop 工具。
iftop 是 Linux 系統(tǒng)一個(gè)免費(fèi)的網(wǎng)卡實(shí)時(shí)流量監(jiān)控工具,類似于 top 命令。iftop 可以監(jiān)控指定網(wǎng)卡的實(shí)時(shí)流量、端口連接信息、反向解析 IP 等,還可以精確顯示本機(jī)網(wǎng)絡(luò)流量及網(wǎng)絡(luò)內(nèi)各主機(jī)和本機(jī)相互通信的流量集合,非常適合于監(jiān)控代理服務(wù)器或路由器的網(wǎng)絡(luò)流量。
同時(shí),iftop 對(duì)檢測(cè)流量異常的主機(jī)非常有效,通過 iftop 的輸出可以迅速定位主機(jī)流量異常的根源,這對(duì)于網(wǎng)絡(luò)故障排查、網(wǎng)絡(luò)安全檢測(cè)是十分有用的。缺點(diǎn)就是無報(bào)表功能,且必須以 root 身份才能運(yùn)行。
安裝
通過軟件管理工具安裝
# CentOS
$ sudo yum install iftop
# Ubuntu
$ sudo apt install iftop
通過源代碼編譯安裝
# 安裝比較軟件包
$ sudo um install libpcap libpcap-devel ncurses ncurses-devel flex byacc
# 下載軟件包
$ wget "http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz"
$ tar zxvf iftop-0.17.tar.gz
$ cd iftop-0.17
$ ./configure
$ make && make install
常用參數(shù)
-i 指定需要檢測(cè)的網(wǎng)卡, 如果有多個(gè)網(wǎng)絡(luò)接口,則需要注意網(wǎng)絡(luò)接口的選擇,如:# iftop -i eth1
-B 將輸出以 byte 為單位顯示網(wǎng)卡流量,默認(rèn)是 bit
-n 將輸出的主機(jī)信息都通過 IP 顯示,不進(jìn)行 DNS 解析
-N 只顯示連接端口號(hào),不顯示端口對(duì)應(yīng)的服務(wù)名稱
-F 顯示特定網(wǎng)段的網(wǎng)卡進(jìn)出流量 如: iftop -F 192.168.85.0/24
-h 幫助,顯示參數(shù)信息
-p 以混雜模式運(yùn)行 iftop,此時(shí) iftop 可以用作網(wǎng)絡(luò)嗅探器
-P 顯示主機(jī)以及端口信息
-m 設(shè)置輸出界面中最上面的流量刻度最大值,流量刻度分 5 個(gè)大段顯示 如:# iftop -m 100M
-f 使用篩選碼選擇數(shù)據(jù)包來計(jì)數(shù) 如 iftop -f filter code
-b 不顯示流量圖形條
-c 指定可選的配置文件,如:iftop -c config file
-t 使用不帶 ncurses 的文本界面,
以下兩個(gè)是只和 -t 一起用的:
-s num num 秒后打印一次文本輸出然后退出,-t -s 60 組合使用,表示取 60 秒網(wǎng)絡(luò)流量輸出到終端
-L num 打印的行數(shù)
-f 參數(shù)支持 tcpdump 的語法,可以使用各種過濾條件。
界面操作
界面信息
安裝完 iftop 工具后,直接輸入 iftop 命令即可顯示網(wǎng)卡實(shí)時(shí)流量信息。在默認(rèn)情況下,iftop 顯示系統(tǒng)第一塊網(wǎng)卡的流量信息,如果要顯示指定網(wǎng)卡信息,可通過“-i”參數(shù)實(shí)現(xiàn)。執(zhí)行“iftop -P -i eth0”命令,得到如下圖所示的 iftop 的一個(gè)典型輸出界面。
第一部分
iftop 輸出中最上面的一行,此行信息是流量刻度,用于顯示網(wǎng)卡帶寬流量。 第二部分
此部分為分割線中間的部分,其中又分別分為左、中、右三列。左列和中列,記錄了哪些 IP 或主機(jī)正在和本機(jī)的網(wǎng)絡(luò)進(jìn)行連接。其中,中列的“=>”代表發(fā)送數(shù)據(jù),“<=”代表接收數(shù)據(jù),通過這個(gè)指示箭頭可以很清晰地知道兩個(gè) IP 之間的通信情況。最右列又分為三小列,這些實(shí)時(shí)參數(shù)分別表示外部 IP 連接到本機(jī) 2 秒內(nèi)、10 秒內(nèi)和 40 秒內(nèi)的平均流量值。 另外,這個(gè)部分還有一個(gè)流量圖形條,流量圖形條是對(duì)流量大小的動(dòng)態(tài)展示,以第一部分中的流量刻度為基準(zhǔn)。通過這個(gè)流量圖形條可以很方便地看出哪個(gè) IP 的流量最大,進(jìn)而迅速定位網(wǎng)絡(luò)中可能出現(xiàn)的流量問題。 第三部分
位于 iftop 輸出的最下面,可以分為三行,其中,“TX”表示發(fā)送數(shù)據(jù),“RX”表示接收數(shù)據(jù),“TOTAL”表示發(fā)送和接收全部流量。與這三行對(duì)應(yīng)的有三列,其中“cum”列表示從運(yùn)行 iftop 到目前的發(fā)送、接收和總數(shù)據(jù)流量?!皃eak”列表示發(fā)送、接收以及總的流量峰值?!皉ates”列表示過去 2s、10s、40s 的平均流量值。 
交互操作
在 iftop 的實(shí)時(shí)監(jiān)控界面中,還可以對(duì)輸出結(jié)果進(jìn)行交互式操作,用于對(duì)輸出信息進(jìn)行整理和過濾,在上圖所示界面中,按鍵 “h” 即可進(jìn)入交互選項(xiàng)界面,如下圖所示。iftop 的交互功能和 Linux 下的 top 命令非常類似,交互參數(shù)主要分為 4 個(gè)部分,分別是一般參數(shù)、主機(jī)顯示參數(shù)、端口顯示參數(shù)和輸出排序參數(shù)。相關(guān)參數(shù)的含義如下表所示。
參數(shù) 含義
P 通過此鍵可切換暫停/繼續(xù)顯示
h 通過此鍵可在交互參數(shù)界面/狀態(tài)輸出界面之間來回切換
b 通過此鍵可切換是否顯示平均流量圖形條
B 通過此鍵可切換顯示2秒、10秒、40秒內(nèi)的平均流量
T 通過此鍵可切換是否顯示每個(gè)連接的總流量
j/k 按j鍵或k鍵可以向上或向下滾動(dòng)屏幕顯示當(dāng)前的連接信息
l 通過此鍵可打開iftop輸出過濾功能,比如輸入要顯示的IP,按回車后,屏幕就只顯示與這個(gè)IP相關(guān)的流量信息
L 通過此鍵可切換顯示流量刻度范圍,刻度不同,流量圖形條會(huì)跟著變化
q 通過此鍵可退出iftop流量監(jiān)控界面
n 通過此鍵可使iftop輸出結(jié)果以IP或主機(jī)名的方式顯示
s 通過此鍵可切換是否顯示源主機(jī)信息
d 通過此鍵可切換是否顯示遠(yuǎn)端目標(biāo)主機(jī)信息
t 通過此鍵可切換iftop顯示格式,連續(xù)按此鍵可依次顯示:以兩行顯示發(fā)送接收流量、以一行顯示發(fā)送接收流量、只顯示發(fā)送流量/接收流量
N 通過此鍵可切換顯示端口號(hào)/端口號(hào)對(duì)應(yīng)服務(wù)名稱
S 通過此鍵可切換是否顯示本地源主機(jī)的端口信息
D 通過此鍵可切換是否顯示遠(yuǎn)端目標(biāo)主機(jī)的端口信息
p 通過此鍵可切換是否顯示端口信息
1/2/3 根據(jù)最近 2 秒、10 秒、40 秒的平均網(wǎng)絡(luò)流量排序
< 通過此鍵可根據(jù)左邊的本地主機(jī)名或IP地址進(jìn)行排序
> 通過此鍵可根據(jù)遠(yuǎn)端目標(biāo)主機(jī)的主機(jī)名或IP地址進(jìn)行排序
o 通過此鍵可切換是否固定顯示當(dāng)前的連接
使用示例
顯示網(wǎng)卡 eth0 的信息,主機(jī)通過 ip 顯示
$ iftop -i eth0 -n
顯示端口號(hào)(添加 -P 參數(shù),進(jìn)入界面可通過 p 參數(shù)關(guān)閉)
$ iftop -i eth0 -n -P
顯示將輸出以 byte 為單位顯示網(wǎng)卡流量,默認(rèn)是 bit
$ iftop -i eth0 -n -B
顯示流量進(jìn)度條
## 進(jìn)入界面后按下 L
$ iftop -i eth0 -n
顯示每個(gè)連接的總流量
## 進(jìn)入界面后按下 T
$ iftop -i eth0 -n
顯示指定 ip 172.17.1.158 的流量
進(jìn)入界面后按下 l 后,再輸入 172.17.1.158 并回車)
$ iftop -i eth0 -n
實(shí)戰(zhàn)
下面我們將通過找出最費(fèi)流量的 IP 和端口號(hào)這一具體實(shí)例,來演示 iftop 強(qiáng)大的功能。
進(jìn)入界面
$ iftop -i eth0 -nNB -m 10M
-i 指定網(wǎng)卡, -n 代表主機(jī)通過ip顯示不走DNS -N 只顯示連接端口號(hào),不顯示端口對(duì)應(yīng)的服務(wù)名稱(不加會(huì)顯示如ssh這樣的服務(wù)名稱,不便于排查) -B 指定顯示單位為Kb,默認(rèn)是bit,太小! -m 設(shè)置輸出界面中最上面的流量刻度最大值,流量刻度分5個(gè)大段顯示
進(jìn)入后界面如下:

按下 L 顯示流量刻度
L 參數(shù)直接顯示進(jìn)度條,方便人類閱讀。

按下 T 顯示總量
有個(gè)總數(shù)統(tǒng)計(jì),看著方便!
按下 3,根據(jù)最近 40s 統(tǒng)計(jì)排序
用平均值來統(tǒng)計(jì)最權(quán)威點(diǎn)

按下 t,發(fā)送和接受合成一行 
多按幾次 B,查看最近 2s、10s、40s 的統(tǒng)計(jì)

篩選指定 IP 172.17.1.158
按下 l, 輸入172.17.1.158,出現(xiàn)如下


找到這個(gè) IP 哪個(gè)端口流量用得最多
按下 p, 根據(jù)端口號(hào)顯示



