對任何規模的業務來說,網絡監控工具都是一個重要的功能。網絡監控的目标可能千差萬别。比如,監控活動的目标可以是保證長期的網絡服務、安全保護、對性能進行排查、網絡使用統計等。由于它的目标不同,網絡監控器使用很多不同的方式來完成任務。比如對包層面的嗅探,對資料流層面的統計資料,向網絡中注入探測的流量,分析伺服器日志等。
盡管有許多專用的網絡監控系統可以365天24小時監控,但您依舊可以在特定的情況下使用指令行式的網絡監控器,某些指令行式的網絡監控器在某方面很有用。如果您是系統管理者,那您就應該有親身使用一些知名的指令行式網絡監控器的經曆。這裡有一份Linux上流行且實用的網絡監控器清單。
在這個類别下,監控工具在鍊路上捕捉獨立的包,分析它們的内容,展示解碼後的内容或者包層面的統計資料。這些工具在最底層對網絡進行監控、管理,同樣的也能進行最細粒度的監控,其代價是影響網絡I/O和分析的過程。
dhcpdump:一個指令行式的DHCP流量嗅探工具,捕捉DHCP的請求/回複流量,并以使用者友好的方式顯示解碼的DHCP協定消息。這是一款排查DHCP相關故障的實用工具。
dsniff:一個基于指令行的嗅探、僞造和劫持的工具合集,被設計用于網絡審查和滲透測試。它可以嗅探多種資訊,比如密碼、NSF流量(LCTT 譯注:此處疑為 NFS 流量)、email消息、網絡位址等。
httpry:一個HTTP封包嗅探器,用于捕獲、解碼HTTP請求和回複封包,并以使用者友好的方式顯示這些資訊。(LCTT 譯注:延伸閱讀。 )
IPTraf:基于指令行的網絡統計資料檢視器。它實時顯示包層面、連接配接層面、接口層面、協定層面的封包/位元組數。抓包過程由協定過濾器控制,且操作過程全部是菜單驅動的。(LCTT 譯注:延伸閱讀。)
mysql-sniffer:一個用于抓取、解碼MySQL請求相關的資料包的工具。它以可讀的方式顯示最頻繁或全部的請求。
ngrep:在網絡封包中執行grep。它能實時抓取封包,并用正規表達式或十六進制表達式的方式比對(過濾)封包。它是一個可以對異常流量進行檢測、存儲或者對實時流中特定模式封包進行抓取的實用工具。
p0f:一個被動的基于包嗅探的指紋采集工具,可以可靠地識别作業系統、NAT或者代理設定、網絡鍊路類型以及許多其它與活動的TCP連接配接相關的屬性。
pktstat:一個指令行式的工具,通過實時分析封包,顯示連接配接帶寬使用情況以及相關的協定(例如,HTTP GET/POST、FTP、X11)等描述資訊。
Snort:一個入侵檢測和預防工具,通過規則驅動的協定分析和内容比對,來檢測/預防活躍流量中各種各樣的後門、僵屍網絡、網絡釣魚、間諜軟體攻擊。
tcpdump:一個指令行的嗅探工具,可以基于過濾表達式抓取網絡中的封包,分析封包,并且在包層面輸出封包内容以便于包層面的分析。他在許多網絡相關的錯誤排查、網絡程式debug、或安全監測方面應用廣泛。
tshark:一個與Wireshark視窗程式一起使用的指令行式的嗅探工具。它能捕捉、解碼網絡上的實時封包,并能以使用者友好的方式顯示其内容。
在這個分類中,網絡監控器通過把流量按照流、相關程序或接口分類,收集每個流、每個程序、每個接口的統計資料。其資訊的來源可以是libpcap抓包庫或者sysfs核心虛拟檔案系統。這些工具的監控成本很低,但是缺乏包層面的檢視能力。
bmon:一個基于指令行的帶寬監測工具,可以顯示各種接口相關的資訊,不但包括接收/發送的總量/平均值統計資料,而且擁有曆史帶寬使用視圖。
iftop:一個帶寬使用監測工具,可以實時顯示某個網絡連接配接的帶寬使用情況。它對所有帶寬使用情況排序并通過ncurses的接口來進行可視化。他可以友善的監控哪個連接配接消耗了最多的帶寬。(LCTT 譯注:延伸閱讀。)
nethogs:一個基于ncurses顯示的程序監控工具,提供程序相關的實時的上行/下行帶寬使用資訊。它對檢測占用大量帶寬的程序很有用。(LCTT 譯注:延伸閱讀。)
netstat:一個顯示許多TCP/UDP的網絡堆棧的統計資訊的工具。諸如打開的TCP/UDP連接配接書、網絡接口發送/接收、路由表、協定/套接字的統計資訊和屬性。當您診斷與網絡堆棧相關的性能、資源使用時它很有用。
speedometer:一個可視化某個接口發送/接收的帶寬使用的曆史趨勢,并且基于ncurses的條狀圖進行顯示的終端工具。
sysdig:一個可以通過統一的界面對各個Linux子系統進行系統級綜合性調試的工具。它的網絡監控子產品可以監控線上或離線、許多程序/主機相關的網絡統計資料,例如帶寬、連接配接/請求數等。(LCTT 譯注:延伸閱讀。)
tcptrack:一個TCP連接配接監控工具,可以顯示活動的TCP連接配接,包括源/目的IP位址/端口、TCP狀态、帶寬使用等。
vnStat:一個存儲并顯示每個接口的曆史接收/發送帶寬視圖(例如,目前、每日、每月)的流量監控器。作為一個背景守護程序,它收集并存儲統計資料,包括接口帶寬使用率和傳輸位元組總數。(LCTT 譯注:延伸閱讀。)
不同于前面提到的被動的監聽工具,這個類别的工具們在監聽時會主動的“注入”探測内容到網絡中,并且會收集相應的反應。監聽目标包括路由路徑、可供使用的帶寬、丢包率、延時、抖動(jitter)、系統設定或者缺陷等。
dnsyo:一個DNS檢測工具,能夠管理跨越多達1500個不同網絡的開放解析器的DNS查詢。它在您檢查DNS傳播或排查DNS設定的時候很有用。
iperf:一個TCP/UDP帶寬測量工具,能夠測量兩個端點間最大可用帶寬。它通過在兩個主機間單向或雙向的輸出TCP/UDP探測流量來測量可用的帶寬。它在監測網絡容量、調諧網絡協定棧參數時很有用。一個叫做netperf的變種擁有更多的功能及更好的統計資料。
netcat/socat:通用的網絡調試工具,可以對TCP/UDP套接字進行讀、寫或監聽。它通常和其他的程式或腳本結合起來在後端對網絡傳輸或端口進行監聽。(LCTT 譯注:延伸閱讀。)
nmap:一個指令行的端口掃描和網絡發現工具。它依賴于若幹基于TCP/UDP的掃描技術來查找開放的端口、活動的主機或者在本地網絡存在的作業系統。它在你審查本地主機漏洞或者建立維護所用的主機映射時很有用。zmap是一個類似的替代品,是一個用于網際網路範圍的掃描工具。(LCTT 譯注:延伸閱讀。)
ping:一個常用的網絡測試工具。通過交換ICMP的echo和reply封包來實作其功能。它在測量路由的RTT、丢包率以及檢測遠端系統防火牆規則時很有用。ping的變種有更漂亮的界面(例如,noping)、多協定支援(例如,hping)或者并行探測能力(例如,fping)。(LCTT 譯注:延伸閱讀。)
sprobe:一個啟發式推斷本地主機和任意遠端IP位址之間的網絡帶寬瓶頸的指令行工具。它使用TCP三向交握機制來評估帶寬的瓶頸。它在檢測大範圍網絡性能和路由相關的問題時很有用。
traceroute:一個能發現從本地到遠端主機的第三層路由/轉發路徑的網絡發現工具。它發送限制了TTL的探測封包,收集中間路由的ICMP回報資訊。它在排查低速網絡連接配接或者路由相關的問題時很有用。traceroute的變種有更好的RTT統計功能(例如,mtr)。
在這個類别下的網絡監測器把特定的伺服器應用程式作為目标(例如,web伺服器或者資料庫伺服器)。由伺服器程式産生或消耗的網絡流量通過它的日志被分析和監測。不像前面提到的網絡層的監控器,這個類别的工具能夠在應用層面分析和監控網絡流量。
GoAccess:一個針對Apache和Nginx伺服器流量的互動式檢視器。基于對擷取到的日志的分析,它能展示包括日通路量、最多請求、用戶端作業系統、用戶端位置、用戶端浏覽器等在内的多個實時的統計資訊,并以滾動方式顯示。
mtop:一個面向MySQL/MariaDB伺服器的指令行監控器,它可以将成本最大的查詢和目前資料庫伺服器負載以可視化的方式顯示出來。它在您優化MySQL伺服器性能、調諧伺服器參數時很有用。
ngxtop:一個面向Nginx和Apache伺服器的流量監測工具,能夠以類似top指令的方式可視化的顯示Web伺服器的流量。它解析web伺服器的查詢日志檔案并收集某個目的地或請求的流量統計資訊。
在這篇文章中,我展示了許多指令行式監測工具,從最底層的包層面的監控器到最高層應用程式層面的網絡監控器。了解那個工具的作用是一回事,選擇哪個工具使用又是另外一回事。單一的一個工具不能作為您每天使用的通用的解決方案。一個好的系統管理者應該能決定哪個工具更适合目前的環境。希望這個清單對此有所幫助。