三款簡(jiǎn)單而優(yōu)秀的Linux網(wǎng)絡(luò)監(jiān)視工具
通過 iftop
、 nethogs
和 vnstat
詳細(xì)了解你的網(wǎng)絡(luò)連接狀態(tài)。
你可以通過這三個(gè) Linux 命令了解當(dāng)前網(wǎng)絡(luò)的大量信息。iftop
通過進(jìn)程號(hào)跟蹤網(wǎng)絡(luò)連接,nethogs
快速告知你哪些進(jìn)程在占用你的帶寬,而 vnstat
以一個(gè)良好的輕量級(jí)守護(hù)進(jìn)程在后臺(tái)運(yùn)行,并實(shí)時(shí)記錄你的網(wǎng)絡(luò)使用情況。
iftop
令人稱贊的 iftop
可以監(jiān)聽您指定的網(wǎng)絡(luò)接口,并以 top 的樣式呈現(xiàn)。
這是一個(gè)不錯(cuò)的小工具,可以用于找出網(wǎng)絡(luò)擁塞,測(cè)速和維持網(wǎng)絡(luò)流量總量。看到自己到底在用多少帶寬往往是非常驚人的,尤其是對(duì)于我們這些仍然記得電話線路、調(diào)制解調(diào)器,“高速”到令人驚叫的 kb 和實(shí)時(shí)波特率的老人們。我們?cè)诤芫弥熬筒辉偈褂貌ㄌ芈?,轉(zhuǎn)而鐘情于比特率。波特率用于衡量信號(hào)變化,盡管有時(shí)候與比特率相同,但大多數(shù)情況下并非如此。
如果你只有一個(gè)網(wǎng)絡(luò)接口,直接運(yùn)行 iftop
即可。不過 iftop
需要 root 權(quán)限:
$ sudo iftop
如果你有多個(gè)網(wǎng)絡(luò)接口,那就指定你要監(jiān)控的接口:
$ sudo iftop -i wlan0
就像 top
命令一樣,你可以在命令運(yùn)行時(shí)更改顯示選項(xiàng):
h
切換幫助界面。n
是否解析域名。s
切換源地址的顯示,d
則切換目的地址的顯示。S
是否顯示端口號(hào)。N
是否解析端口;若關(guān)閉解析則顯示端口號(hào)。t
切換文本顯示界面。默認(rèn)的顯示方式需要 ncurses。我個(gè)人認(rèn)為圖 1 的顯示方式在組織性和可讀性都更加良好。p
暫停顯示更新。q
退出程序。
圖 1:組織性和可讀性良好的文本顯示。
當(dāng)你切換顯示設(shè)置的時(shí)候,iftop
并不會(huì)中斷監(jiān)測(cè)流量。當(dāng)然你也可以單獨(dú)監(jiān)測(cè)一臺(tái)主機(jī)。而這需要該主機(jī)的 IP 地址和子網(wǎng)掩碼?,F(xiàn)在,我很好奇 Pandora(LCTT 譯注:一家美國(guó)的電臺(tái)公司)能給我貧瘠的帶寬帶來多大的負(fù)載。因此我首先使用 dig 命令找到他們的 IP 地址:
$ dig A pandora.com
[...]
;; ANSWER SECTION:
pandora.com. 267 IN A 208.85.40.20
pandora.com. 267 IN A 208.85.40.50
那子網(wǎng)掩碼呢?ipcalc 會(huì)告訴我們:
$ ipcalc -b 208.85.40.20
Address: 208.85.40.20
Netmask: 255.255.255.0 = 24
Wildcard: 0.0.0.255
=>
Network: 208.85.40.0/24
現(xiàn)在,將 IP 地址和子網(wǎng)掩碼提供給 iftop
:
$ sudo iftop -F 208.85.40.20/24 -i wlan0
很棒的不是么?而我也很驚奇地發(fā)現(xiàn),Pandora 在我的網(wǎng)絡(luò)上,每小時(shí)大約使用 500kb。并且就像大多數(shù)流媒體服務(wù)一樣,Pandora 的流量在迅速增長(zhǎng),并依靠緩存穩(wěn)定下來。
你可以使用 -G
選項(xiàng)對(duì) IPv6 地址執(zhí)行相同的操作。查閱友好的 man 可以幫助你了解 iftop
的其他功能,包括使用個(gè)人配置文件自定義你的默認(rèn)選項(xiàng),以及使用自定義過濾(請(qǐng)參閱 PCAP-FILTER 來獲取過濾指南)。
nethogs
當(dāng)你想要快速了解是誰在吸取你的帶寬的時(shí)候,nethogs
是個(gè)快速而簡(jiǎn)單的方法。你需要以 root 身份運(yùn)行并指定要監(jiān)聽的接口。它會(huì)給你顯示大量的應(yīng)用程序及其進(jìn)程號(hào),所以如果你想的話,你可以借此殺死任一進(jìn)程。
$ sudo nethogs wlan0
nethogs version 0.8.1
PID USER PROGRAM DEV SENT RECEIVED
7690 carla /usr/lib/firefox wlan0 12.494 556.580 KB/sec
5648 carla .../chromium-browser wlan0 0.052 0.038 KB/sec
TOTAL 12.546 556.618 KB/sec
nethogs
并沒有多少選項(xiàng):在 kb/s、kb、b、mb之間循環(huán),按接收和發(fā)送的數(shù)據(jù)包排序,調(diào)整刷新延遲。具體請(qǐng)看man nethogs
,或者是運(yùn)行 nethogs -h
。
vnstat
vnstat是最容易使用的網(wǎng)絡(luò)數(shù)據(jù)收集工具。它十分輕量并且不需要 root 權(quán)限。它以守護(hù)進(jìn)程在后臺(tái)運(yùn)行,因此可以實(shí)時(shí)地記錄你的網(wǎng)絡(luò)數(shù)據(jù)。單個(gè) vnstat
命令就可以顯示所累計(jì)的數(shù)據(jù)。
$ vnstat -i wlan0
Database updated: Tue Oct 17 08:36:38 2017
wlan0 since 10/17/2017
rx: 45.27 MiB tx: 3.77 MiB total: 49.04 MiB
monthly
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
Oct '17 45.27 MiB | 3.77 MiB | 49.04 MiB | 0.28 kbit/s
------------------------+-------------+-------------+---------------
estimated 85 MiB | 5 MiB | 90 MiB |
daily
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
today 45.27 MiB | 3.77 MiB | 49.04 MiB | 12.96 kbit/s
------------------------+-------------+-------------+---------------
estimated 125 MiB | 8 MiB | 133 MiB |
默認(rèn)情況下它會(huì)顯示所有的網(wǎng)絡(luò)接口。使用 -i
選項(xiàng)來選擇某個(gè)接口。也可以像這樣合并多個(gè)接口的數(shù)據(jù):
$ vnstat -i wlan0+eth0+eth1
你可以通過這幾種方式過濾數(shù)據(jù)顯示:
-h
按小時(shí)顯示統(tǒng)計(jì)信息。-d
按天顯示統(tǒng)計(jì)信息.-w
和-m
分別按周和月份來顯示統(tǒng)計(jì)信息。- 使用
-l
選項(xiàng)查看實(shí)時(shí)更新。
以下這條命令將會(huì)刪除 wlan1 的數(shù)據(jù)庫并不再監(jiān)視它:
$ vnstat -i wlan1 --delete
而下面這條命令將會(huì)為你的一個(gè)網(wǎng)絡(luò)接口創(chuàng)建一個(gè)別名。這個(gè)例子使用了 Ubuntu 16.04 的一個(gè)有線接口名稱:
$ vnstat -u -i enp0s25 --nick eth0
默認(rèn)情況下,vnstat 會(huì)監(jiān)視 eth0。你可以在 /etc/vnstat.conf
對(duì)它進(jìn)行修改,或者在你的家目錄下創(chuàng)建你自己的個(gè)人配置文件。請(qǐng)參閱 man vnstat
以獲取完整的指南。
你也可以安裝 vnstati
來創(chuàng)建簡(jiǎn)單的彩圖(圖 2):
$ vnstati -s -i wlx7cdd90a0a1c2 -o vnstat.png
圖 2:你可以使用vnstati來創(chuàng)建簡(jiǎn)單的彩圖。
請(qǐng)參閱 man vnstati
以獲取完整的選項(xiàng)。