如果要在你的系統上監控網路,那麼使用命令列工具是非常實用的,並且對於 Linux 使用者來說,有著許許多多現成的工具可以使用,如: nethogs, ntopng, nload, iftop, iptraf, bmon, slurm, tcptrack, cbm, netwatch, collectl, trafshow, cacti, etherape, ipband, jnettop, netspeed 以及 speedometer。
鑑於世上有著許多的 Linux 專家和開發者,顯然還存在其他的網路監控工具,但在這篇教程中,我不打算將它們所有包括在內。
上面列出的工具都有著自己的獨特之處,但歸根結底,它們都做著監控網路流量的工作,只是通過各種不同的方法。例如 nethogs 可以被用來展示每個程式的頻寬使用情況,以防你想知道究竟是哪個應用在消耗了你的整個網路資源; iftop 可以被用來展示每個套接字連線的頻寬使用情況,而像 nload 這類的工具可以幫助你得到有關整個頻寬的資訊。
1) nethogs
nethogs 是一個免費的工具,當要查詢哪個 PID (注:即 process identifier,程式 ID) 給你的網路流量帶來了麻煩時,它是非常方便的。它按每個程式來分組頻寬,而不是像大多數的工具那樣按照每個協議或每個子網來劃分流量。它功能豐富,同時支援 IPv4 和 IPv6,並且我認為,若你想在你的 Linux 主機上確定哪個程式正消耗著你的全部頻寬,它是來做這件事的最佳的程式。
一個 Linux 使用者可以使用 nethogs 來顯示每個程式的 TCP 下載和上傳速率,可以使用命令 nethogs eth0 來監控一個指定的裝置,上面的 eth0 是那個你想獲取資訊的裝置的名稱,你還可以得到有關正在傳輸的資料的傳輸速率資訊。
對我而言, nethogs 是非常容易使用的,或許是因為我非常喜歡它,以至於我總是在我的 Ubuntu 12.04 LTS 機器中使用它來監控我的網路頻寬。
例如要想使用混雜模式來嗅探,可以像下面展示的命令那樣使用選項 -p:
1 |
nethogs -p wlan0 |
假如你想更多地瞭解 nethogs 並深入探索它,那麼請毫不猶豫地閱讀我們做的關於這個網路頻寬監控工具的整個教程。
2) nload
nload 是一個控制檯應用,可以被用來實時地監控網路流量和頻寬使用情況,它還通過提供兩個簡單易懂的圖表來對流量進行視覺化。這個絕妙的網路監控工具還可以在監控過程中切換被監控的裝置,而這可以通過按左右箭頭來完成。
正如你在上面的截圖中所看到的那樣,由 nload 提供的圖表是非常容易理解的。nload 提供了有用的資訊,也展示了諸如被傳輸資料的總量和最小/最大網路速率等資訊。
而更酷的是你只需要直接執行 nload 這個工具就行,這個命令是非常的短小且易記的:
1 |
nload |
我很確信的是:我們關於如何使用 nload 的詳細教程將幫助到新的 Linux 使用者,甚至可以幫助那些正尋找關於 nload 資訊的老手。
3) slurm
slurm 是另一個 Linux 網路負載監控工具,它以一個不錯的 ASCII 圖來顯示結果,它還支援許多按鍵用以互動,例如 c 用來切換到經典模式, s 切換到分圖模式, r 用來重繪螢幕, L 用來啟用 TX/RX 燈(注:TX,傳送流量;RX,接收流量) ,m 用來在經典分圖模式和大圖模式之間進行切換, q 退出 slurm。
在網路負載監控工具 slurm 中,還有許多其它的按鍵可用,你可以很容易地使用下面的命令在 man 手冊中學習它們。
1 |
man slurm |
slurm 在 Ubuntu 和 Debian 的官方軟體倉庫中可以找到,所以使用這些發行版本的使用者可以像下面展示的那樣,使用 apt-get 安裝命令來輕鬆地下載它:
1 |
sudo apt-get install slurm |
我們已經在一個教程中對 slurm 的使用做了介紹,不要忘記和其它使用 Linux 的朋友分享這些知識。
4) iftop
當你想顯示連線到網路卡上的各個主機的頻寬使用情況時,iftop 是一個非常有用的工具。根據 man 手冊,iftop 在一個指定的介面或在它可以找到的第一個介面(假如沒有任何特殊情況,它應該是一個對外的介面)上監聽網路流量,並且展示出一個表格來顯示當前的一對主機間的頻寬使用情況。
通過在虛擬終端中使用下面的命令,Ubuntu 和 Debian 使用者可以在他們的機器中輕易地安裝 iftop:
1 |
sudo apt-get install iftop |
在你的機器上,可以使用下面的命令通過 yum 來安裝 iftop:
1 |
yum -y install iftop |
5) collectl
collectl 可以被用來收集描述當前系統狀態的資料,並且它支援如下兩種模式:
- 記錄模式
- 回放模式
記錄模式 允許從一個正在執行的系統中讀取資料,然後將這些資料要麼顯示在終端中,要麼寫入一個或多個檔案或一個套接字中。
回放模式
根據 man 手冊,在這種模式下,資料從一個或多個由記錄模式生成的資料檔案中讀取。
Ubuntu 和 Debian 使用者可以在他們的機器上使用他們預設的包管理器來安裝 colletcl。下面的命令將為他們做這個工作:
1 |
sudo apt-get install collectl |
還可以使用下面的命令來安裝 collectl, 因為對於這些發行版本(注:這裡指的是用 yum 作為包管理器的發行版本),在它們官方的軟體倉庫中也含有 collectl:
1 |
yum install collectl |
6) Netstat
Netstat 是一個用來監控傳入和傳出的網路資料包統計資料的介面統計資料命令列工具。它會顯示 TCP 連線 (包括上傳和下行),路由表,及一系列的網路介面(網路卡或者SDN介面)和網路協議統計資料。
Ubuntu 和 Debian 使用者可以在他們的機器上使用預設的包管理器來安裝 netstat。Netsta 軟體被包括在 net-tools 軟體包中,並可以在 shell 或虛擬終端中執行下面的命令來安裝它:
1 |
sudo apt-get install net-tools |
CentOS, Fedora, RHEL 使用者可以在他們的機器上使用預設的包管理器來安裝 netstat。Netstat 軟體被包括在 net-tools 軟體包中,並可以在 shell 或虛擬終端中執行下面的命令來安裝它:
1 |
yum install net-tools |
執行下面的命令使用 Netstat 來輕鬆地監控網路資料包統計資料:
1 |
netstat |
更多的關於 netstat 的資訊,我們可以簡單地在 shell 或終端中鍵入 man netstat 來了解:
1 |
man netstat |
7) Netload
netload 命令只展示一個關於當前網路荷載和自從程式執行之後傳輸資料總的位元組數目的簡要報告,它沒有更多的功能。它是 netdiag 軟體的一部分。
我們可以在 fedora 中使用 yum 來安裝 Netload,因為它在 fedora 的預設軟體倉庫中。但假如你執行的是 CentOS 或 RHEL,則我們需要安裝 rpmforge 軟體倉庫。
1 |
# yum install netdiag |
Netload 是預設倉庫中 netdiag 的一部分,我們可以輕易地使用下面的命令來利用 apt 包管理器安裝 netdiag:
1 |
$ sudo apt-get install netdiag |
為了執行 netload,我們需要確保選擇了一個正在工作的網路介面的名稱,如 eth0, eh1, wlan0, mon0等,然後在 shell 或虛擬終端中執行下面的命令:
1 |
$ netload wlan2 |
注意: 請將上面的 wlan2 替換為你想使用的網路介面名稱,假如你想通過掃描了解你的網路介面名稱,可以在一個虛擬終端或 shell 中執行 ip link show 命令。
8) Nagios
Nagios 是一個領先且功能強大的開源監控系統,它使得網路或系統管理員可以在伺服器的各種問題影響到伺服器的主要事務之前,發現並解決這些問題。 有了 Nagios 系統,管理員便可以在一個單一的視窗中監控遠端的 Linux 、Windows 系統、交換機、路由器和印表機等。它會顯示出重要的警告並指出在你的網路或伺服器中是否出現某些故障,這可以間接地幫助你在問題發生前就著手執行補救行動。
Nagios 有一個 web 介面,其中有一個圖形化的活動監視器。通過瀏覽網頁 http://localhost/nagios/ 或 http://localhost/nagios3/ 便可以登入到這個 web 介面。假如你在遠端的機器上進行操作,請使用你的 IP 地址來替換 localhost,然後鍵入使用者名稱和密碼,我們便會看到如下圖所展示的資訊:
9) EtherApe
EtherApe 是一個針對 Unix 的圖形化網路監控工具,它仿照了 etherman 軟體。它支援鏈路層、IP 和 TCP 等模式,並支援乙太網, FDDI, 令牌環, ISDN, PPP, SLIP 及 WLAN 裝置等介面,以及一些封裝格式。主機和連線隨著流量和協議而改變其尺寸和顏色。它可以過濾要展示的流量,並可從一個檔案或執行的網路中讀取資料包。
在 CentOS、Fedora、RHEL 等 Linux 發行版本中安裝 etherape 是一件容易的事,因為在它們的官方軟體倉庫中就可以找到 etherape。我們可以像下面展示的命令那樣使用 yum 包管理器來安裝它:
1 |
yum install etherape |
我們也可以使用下面的命令在 Ubuntu、Debian 及它們的衍生髮行版本中使用 apt 包管理器來安裝 EtherApe :
1 |
sudo apt-get install etherape |
在 EtherApe 安裝到你的系統之後,我們需要像下面那樣以 root 許可權來執行 etherape:
1 |
sudo etherape |
然後, etherape 的 圖形使用者介面 便會被執行。接著,在選單上面的 捕捉 選項下,我們可以選擇 模式(IP,鏈路層,TCP) 和 介面。一切設定完畢後,我們需要點選 開始 按鈕。接著我們便會看到類似下面截圖的東西:
10) tcpflow
tcpflow 是一個命令列工具,它可以捕捉 TCP 連線(流)的部分傳輸資料,並以一種方便協議分析或除錯的方式來儲存資料。它重構了實際的資料流並將每個流儲存在不同的檔案中,以備日後的分析。它能識別 TCP 序列號並可以正確地重構資料流,不管是在重發還是亂序傳送狀態下。
通過 apt 包管理器在 Ubuntu 、Debian 系統中安裝 tcpflow 是很容易的,因為預設情況下在官方軟體倉庫中可以找到它。
1 |
$ sudo apt-get install tcpflow |
我們可以使用下面的命令通過 yum 包管理器在 Fedora 、CentOS 、RHEL 及它們的衍生髮行版本中安裝 tcpflow:
1 |
# yum install tcpflow |
假如在軟體倉庫中沒有找到它或不能通過 yum 包管理器來安裝它,則我們需要像下面展示的那樣從 http://pkgs.repoforge.org/tcpflow/ 上手動安裝它:
假如你執行 64 位的 PC:
1 |
# yum install --nogpgcheck http://pkgs.repoforge.org/tcpflow/tcpflow-0.21-1.2.el6.rf.x86_64.rpm |
假如你執行 32 位的 PC:
1 |
# yum install --nogpgcheck http://pkgs.repoforge.org/tcpflow/tcpflow-0.21-1.2.el6.rf.i686.rpm |
我們可以使用 tcpflow 來捕捉全部或部分 tcp 流量,並以一種簡單的方式把它們寫到一個可讀的檔案中。下面的命令就可以完成這個事情,但我們需要在一個空目錄中執行下面的命令,因為它將建立諸如 x.x.x.x.y-a.a.a.a.z 格式的檔案,執行之後,只需按 Ctrl-C 便可停止這個命令。
1 |
$ sudo tcpflow -i eth0 port 8000 |
注意:請將上面的 eth0 替換為你想捕捉的網路卡介面名稱。
11) IPTraf
IPTraf 是一個針對 Linux 平臺的基於控制檯的網路統計應用。它生成一系列的圖形,如 TCP 連線的包/位元組計數、介面資訊和活動指示器、 TCP/UDP 流量故障以及區域網內裝置的包/位元組計數。
在預設的軟體倉庫中可以找到 IPTraf,所以我們可以使用下面的命令通過 apt 包管理器輕鬆地安裝 IPTraf:
1 |
$ sudo apt-get install iptraf |
我們可以使用下面的命令通過 yum 包管理器輕鬆地安裝 IPTraf:
1 |
# yum install iptraf |
我們需要以管理員許可權來執行 IPTraf,並帶有一個有效的網路介面名。這裡,我們的網路介面名為 wlan2,所以我們使用 wlan2 來作為引數:
1 |
$ sudo iptraf wlan2 |
開始通常的網路介面統計,鍵入:
1 |
# iptraf -g |
檢視介面 eth0 的詳細統計資訊,使用:
1 |
# iptraf -d eth0 |
檢視介面 eth0 的 TCP 和 UDP 監控資訊,使用:
1 |
# iptraf -z eth0 |
檢視介面 eth0 的包的大小和數目,使用:
1 |
# iptraf -z eth0 |
注意:請將上面的 eth0 替換為你的介面名稱。你可以通過執行ip link show命令來檢查你的介面。
12) Speedometer
Speedometer 是一個小巧且簡單的工具,它只用來繪出一幅包含有通過某個給定埠的上行、下行流量的好看的圖。
在預設的軟體倉庫中可以找到 Speedometer ,所以我們可以使用下面的命令通過 yum 包管理器輕鬆地安裝 Speedometer:
1 |
# yum install speedometer |
我們可以使用下面的命令通過 apt 包管理器輕鬆地安裝 Speedometer:
1 |
$ sudo apt-get install speedometer |
Speedometer 可以簡單地通過在 shell 或虛擬終端中執行下面的命令來執行:
1 |
$ speedometer -r wlan2 -t wlan2 |
注:請將上面的 wlan2 替換為你想要使用的網路介面名稱。
13) Netwatch
Netwatch 是 netdiag 工具集裡的一部分,它也顯示當前主機和其他遠端主機的連線情況,以及在每個連線中資料傳輸的速率。
我們可以使用 yum 在 fedora 中安裝 Netwatch,因為它在 fedora 的預設軟體倉庫中。但若你執行著 CentOS 或 RHEL , 我們需要安裝 rpmforge 軟體倉庫。
1 |
# yum install netwatch |
Netwatch 是 netdiag 的一部分,可以在預設的軟體倉庫中找到,所以我們可以輕鬆地使用下面的命令來利用 apt 包管理器安裝 netdiag:
1 |
$ sudo apt-get install netdiag |
為了執行 netwatch, 我們需要在虛擬終端或 shell 中執行下面的命令:
1 |
$ sudo netwatch -e wlan2 -nt |
注意: 請將上面的 wlan2 替換為你想使用的網路介面名稱,假如你想通過掃描了解你的網路介面名稱,可以在一個虛擬終端或 shell 中執行 ip link show 命令。
14) Trafshow
Trafshow 同 netwatch 和 pktstat 一樣,可以報告當前活動的連線裡使用的協議和每個連線中資料傳輸的速率。它可以使用 pcap 型別的過濾器來篩選出特定的連線。
我們可以使用 yum 在 fedora 中安裝 trafshow ,因為它在 fedora 的預設軟體倉庫中。但若你正執行著 CentOS 或 RHEL , 我們需要安裝 rpmforge 軟體倉庫。
1 |
# yum install trafshow |
Trafshow 在預設倉庫中可以找到,所以我們可以輕鬆地使用下面的命令來利用 apt 包管理器安裝它:
1 |
$ sudo apt-get install trafshow |
為了使用 trafshow 來執行監控任務,我們需要在虛擬終端或 shell 中執行下面的命令:
1 |
$ sudo trafshow -i wlan2 |
為了專門監控 tcp 連線,如下面一樣新增上 tcp 引數:
1 |
$ sudo trafshow -i wlan2 tcp |
注意: 請將上面的 wlan2 替換為你想使用的網路介面名稱,假如你想通過掃描了解你的網路介面名稱,可以在一個虛擬終端或 shell 中執行 ip link show 命令。
15) Vnstat
與大多數的其他工具相比,Vnstat 有一點不同。實際上它執行著一個後臺服務或守護程式,並時刻記錄著傳輸資料的大小。另外,它可以被用來生成一個網路使用歷史記錄的報告。
我們需要開啟 EPEL 軟體倉庫,然後執行 yum 包管理器來安裝 vnstat。
1 |
# yum install vnstat |
Vnstat 在預設軟體倉庫中可以找到,所以我們可以使用下面的命令執行 apt 包管理器來安裝它:
1 |
$ sudo apt-get install vnstat |
不帶有任何選項執行 vnstat 將簡單地展示出從該守護程式執行後資料傳輸的總量。
1 |
$ vnstat |
為了實時地監控頻寬使用情況,使用 ‘-l’ 選項(live 模式)。然後它將以一種非常精確的方式來展示上行和下行資料所使用的頻寬總量,但不會顯示任何有關主機連線或程式的內部細節。
1 |
$ vnstat -l |
完成了上面的步驟後,按 Ctrl-C 來停止,這將會得到如下型別的輸出:
16) tcptrack
tcptrack 可以展示 TCP 連線的狀態,它在一個給定的網路埠上進行監聽。tcptrack 監控它們的狀態並展示出排序且不斷更新的列表,包括來源/目標地址、頻寬使用情況等資訊,這與 top 命令的輸出非常類似 。
鑑於 tcptrack 在軟體倉庫中,我們可以輕鬆地在 Debian、Ubuntu 系統中從軟體倉庫使用 apt 包管理器來安裝 tcptrack。為此,我們需要在 shell 或虛擬終端中執行下面的命令:
1 |
$ sudo apt-get install tcptrack |
我們可以通過 yum 在 fedora 中安裝它,因為它在 fedora 的預設軟體倉庫中。但若你執行著 CentOS 或 RHEL 系統,我們需要安裝 rpmforge 軟體倉庫。為此,我們需要執行下面的命令:
1 2 3 |
# wget http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm # rpm -Uvh rpmforge-release*rpm # yum install tcptrack |
注:這裡我們下載了 rpmforge-release 的當前最新版本,即 0.5.3-1,你總是可以從 rpmforge 軟體倉庫中下載其最新版本,並請在上面的命令中替換為你下載的版本。
tcptrack 需要以 root 許可權或超級使用者身份來執行。執行 tcptrack 時,我們需要帶上要監視的網路介面 TCP 連線狀況的介面名稱。這裡我們的介面名稱為 wlan2,所以如下面這樣使用:
1 |
sudo tcptrack -i wlan2 |
假如你想監控特定的埠,則使用:
1 |
# tcptrack -i wlan2 port 80 |
請替換上面的 80 為你想要監控的埠號。注意: 請將上面的 wlan2 替換為你想使用的網路介面名稱,假如你想通過掃描了解你的網路介面名稱,可以在一個虛擬終端或 shell 中執行 ip link show 命令。
17) CBM
CBM ( Color Bandwidth Meter) 可以展示出當前所有網路裝置的流量使用情況。這個程式是如此的簡單,以至於都可以從它的名稱中看出其功能。CBM 的原始碼和新版本可以在 http://www.isotton.com/utils/cbm/ 上找到。
鑑於 CBM 已經包含在軟體倉庫中,我們可以簡單地使用 apt 包管理器從 Debian、Ubuntu 的軟體倉庫中安裝 CBM。為此,我們需要在一個 shell 視窗或虛擬終端中執行下面的命令:
1 |
$ sudo apt-get install cbm |
我們只需使用下面展示的命令來在 shell 視窗或虛擬終端中執行 cbm:
1 |
$ cbm |
18) bmon
Bmon ( Bandwidth Monitoring) ,是一個用於除錯和實時監控頻寬的工具。這個工具能夠檢索各種輸入模組的統計資料。它提供了多種輸出方式,包括一個基於 curses 庫的介面,輕量級的HTML輸出,以及 ASCII 輸出格式。
bmon 可以在軟體倉庫中找到,所以我們可以通過使用 apt 包管理器來在 Debian、Ubuntu 中安裝它。為此,我們需要在一個 shell 視窗或虛擬終端中執行下面的命令:
1 |
$ sudo apt-get install bmon |
我們可以使用下面的命令來執行 bmon 以監視我們的網路狀態:
1 |
$ bmon |
19) tcpdump
TCPDump 是一個用於網路監控和資料獲取的工具。它可以為我們節省很多的時間,並可用來除錯網路或伺服器的相關問題。它可以列印出在某個網路介面上與布林表示式相匹配的資料包所包含的內容的一個描述。
tcpdump 可以在 Debian、Ubuntu 的預設軟體倉庫中找到,我們可以簡單地以 sudo 許可權使用 apt 包管理器來安裝它。為此,我們需要在一個 shell 視窗或虛擬終端中執行下面的命令:
1 |
$ sudo apt -get install tcpdump |
tcpdump 也可以在 Fedora、CentOS、RHEL 的軟體倉庫中找到。我們可以像下面一樣通過 yum 包管理器來安裝它:
1 |
# yum install tcpdump |
tcpdump 需要以 root 許可權或超級使用者來執行,我們需要帶上我們想要監控的 TCP 連線的網路介面名稱來執行 tcpdump 。在這裡,我們有 wlan2 這個網路介面,所以可以像下面這樣使用:
1 |
$ sudo tcpdump -i wlan2 |
假如你只想監視一個特定的埠,則可以執行下面的命令。下面是一個針對 80 埠(網路伺服器)的例子:
1 |
$ sudo tcpdump -i wlan2 'port 80' |
20) ntopng
[ntopng][20] 是 ntop 的下一代版本。它是一個用於展示網路使用情況的網路探頭,在一定程度上它與 top 針對程式所做的工作類似。ntopng 基於 libpcap 並且它以可移植的方式被重寫,以達到可以在每一個 Unix 平臺 、 MacOSX 以及 Win32 上執行的目的。
為了在 Debian,Ubuntu 系統上安裝 ntopng,首先我們需要安裝 編譯 ntopng 所需的依賴軟體包。你可以通過在一個 shell 視窗或一個虛擬終端中執行下面的命令來安裝它們:
1 |
$ sudo apt-get install libpcap-dev libglib2.0-dev libgeoip-dev redis-server wget libxml2-dev build-essential checkinstall |
現在,我們需要像下面一樣針對我們的系統手動編譯 ntopng :
1 2 3 4 5 6 |
$ sudo wget http://sourceforge.net/projects/ntop/files/ntopng/ntopng-1.1_6932.tgz/download $ sudo tar zxfv ntopng-1.1_6932.tgz $ sudo cd ntopng-1.1_6932 $ sudo ./configure $ sudo make $ sudo make install |
這樣,在你的 Debian 或 Ubuntu 系統上應該已經安裝上了你編譯的 ntopng 。
我們已經有了有關 ntopng 的使用方法的教程,它既可以在命令列也可以在 Web 介面中使用,我們可以前往這些教程來獲得有關 ntopng 的知識。
結論
在這篇文章中,我們介紹了一些在 Linux 下的網路負載監控工具,這對於系統管理員甚至是新手來說,都是很有幫助的。在這篇文章中介紹的每一個工具都具有其特點,不同的選項等,但最終它們都可以幫助你來監控你的網路流量。