Bandwidthd:簡單、好用又強大,各別IP流量統計

  你是否有過這樣的困擾或經驗,幸幸苦苦的架好了一個強大的MRTG,終於可以好好的看看網路流量的情況了,但是看到 的是 一個「總體」的流量。正當高興時,有人在你的網路中「嘿嘿嘿」或是下載P2P或是一個可憐又無知的小朋友電腦中毒了。這時,終於看到MRTG美麗的圖形, 上上下下,左左右右。但你就是找不出來,是「誰」?誰在創造這些美麗的圖形,是「誰」?是「誰」?

  終於,天邊出現一道光,人們跟著說:「就是那道光,Bandwidthd」。(小說看太多了@.@~)

   Bandwidthd 是一套以圖形化、網頁化的方式,顯示你的 TCP/IP 網段中的使用狀況。Bandwidthd 圖形化是以網段中「各自獨立的 IP」為對象,它可以不同的色彩來顯示 HTTP, TCP, UDP, ICMP, VPN 以及 P2P 協定的流量。可以讓網管人員更了解使用者使用網路的情況。和 MRTG 不同的是,bandwidthd 統計是各別的 IP 用量,而不像 MRTG 是顯示某一網路介面的總量,對於網管人員而言,Bandwidthd 可說是一項好用的利器。而且在官方網站上有提供這樣的一個數據:My entire ISP (2000-3000 IP addresses across 4 states) is graphed on a Celeron 450 every 10 minutes。意思是說,使用賽陽450的CPU,可以在10分鐘掃完2000-3000 IP。也就是說,我們可以拿比較舊的電腦來做這個統計工作,而不用擔心效能問題。並且,他也提供和資料庫整合的功能,實在是太棒。最最最重要的是,他的架 設,超簡單。等不及了,我們快來動手吧!
  • 實作系統:CentOS 4.5 Server, 核心版本:2.6.9-55.EL
  • 實作配備:PⅡ Celeron 450 + 256 RAM ( 剛好可以證明:「這是真的。」跟隨者:「真的~~~」 )
  目前最新版本為 2.0.1 (2007/5/23),而且他還有提供Windows版本,真的是太棒了。
  先以 root 登入:
  在安裝之前,我們先看看 README / INSTALL.Unix ,發現有些東西必須先確認一下,你必須確認有安裝以下函式庫:
  檢查一下:
  • rpm -qa | grep libpcap
      找出:libpcap-0.8.3-10.RHEL4
  • rpm -qa | grep libpng
      找出:libpng-1.2.7-3.el4
  • rpm -qa | grep libgd
  你會發現,最後一個 libgd 會是空白的,沒關係,這跟等一下的錯誤有關哦!如果沒有安裝的話,建議使用 yum 來安裝。
  • yum -y install libpcap*
  • yum -y install libpng*
  • yum -y install libgd* (不會安裝任何套件,裝孝為嗎?請往下看,大人。)
  建議把第二個 libpng 執行一下,因為我發現有另一個 libpng10 的套件,而且我未安裝 libpng10 套件時,會出現以下錯誤訊息:
  • configure: error: Bandwidthd requires but cannot libpng
很明顯的,它是使用 libpng10 而不是使用系統內建的 libpng,然後開始安裝吧:
  • ./configure && make install
不過在configure時一直出現以下的錯誤:
  • configure: error: Bandwidthd requires but cannot find libgd
  找又找不到(rpm),安裝也沒有東西(yum),是怎樣!!! (集氣完快成了{..ooOO}!) 到網站看看有沒有什麼資訊( 網站上說:The GD library has moved to http://www.libgd.org/ ), 發現套件名稱都是以 gd 為開頭,那試試 yum search gd,果然找到一堆套件,還好我試了第一次就OK了,不然可能要發功放氣一下才行了!(本來在另一台主機測試時,是直接使用 yum install gd* ,馬上就OK了,但想想有需要安裝那怎多東西嗎?所以就再找一台來試,結果在 CentOS4.4/4.5 情況都一樣,在非常Luck的情況下,試了第一個套件就成功,還好還好,汗~~~)
  • yum install gd-devel <-- 兇手就是他,看我的元氣彈!!!
  再重新configure一次
  • ./configure && make install
  成功了,沒有錯誤訊息了。 安裝完成後,它會將 bandwidthd 安裝至 /usr/local/bandwidthd 下,接下來就是 bandwidthd 超級簡單的設定,請編輯:
  • vi /usr/local/bandwidthd/etc/bandwidthd.conf
  在第 10, 11, 12 行,把這三行註解(#):
  • # subnet 10.0.0.0 255.0.0.0
  • # subnet 192.168.0.0/16
  • # subnet 172.16.0.0/12
   最後加上一行自己網域的設定:
  • subnet 192.168.1.0/24
 一個Intranet, Class C, 指定你要統計的subnet,全部的設定就只有一行,超簡單吧!存檔之後,便可準備執行。執行bandwidthd:
  • cd /usr/local/bandwidthd
  • ./bandwidthd
  然後我們只要在 web 主目錄建立一個Link即可:
  • cd /var/www/html
  • ln -s /usr/local/bandwidthd/htdocs bw ( 目錄名稱自己決定 )
  接著您需要等個幾分鐘,便可用 http://IP/bw or http://domain/bw 看到網路中各主機的頻寬使用情況!
注意一
再來因為這個程式是使用 C 語言所寫,所以你的系統必須要有 gcc 和相關的套件,如果你在 configure 時會出現:
  make: cc: Command not found
  或是
  configure: error: no acceptable cc found in $PATH
那怎請先把 gcc 安裝起來。我的 CentOS4.4 剛裝完時,還真的沒有 gcc ,產生了第二個錯誤訊息:
  yum -y install gcc*
或是把 gcc 升級到最新版本:
  yum -y update gcc*
應該就可以解決 configure 時的問題了。

注意二
以下是 bandwidthd 的 README 中倒數第二段,有一段話:

By default, Bandwidthd now runs in promiscuous mode. This means it can be used to monitor traffic not routing through it's host. Just make sure that the host and the actual router are on the same hub (Not switch) and everything will be ok.
注意那個粗體字,所以,請把 Bandwidthd 的主機與你的骨幹用hub連接,應該就會有所有的流量了。或者,如果你的nat或router是自己架的Linux,那就直接裝在 nat / router 主機上也行。
Windows 安裝 Bandwidthd
  Bandwidthd 在 Windows 的安裝,更簡單100倍。我們快來看看!
  1. 先把檔案下載回來:http://nchc.dl.sourceforge.net/sourceforge/bandwidthd/bandwidthd-2.0.1-binary-windows.zip
  2. 解 壓縮後,會產生一個 bandwidthd 的目錄,移到你要放 program 的地方(一般是放到 \program file\ 之下)。然後先看一下 README.txt 和 INSTALL.Windows.txt 有一件事要確認,你是否有安裝 Winpcap 這個軟體,如果沒有的話,請先下載:http://www.winpcap.org/ ,最新版是 winpcap 4.0。
  3. 然後,修改 bandwidthd/etc/bandwidthd.conf ,將你要統計的 subnet 設定上去,存檔。
  4. 點擊 "Install Service.bat" 這支程式,把 bandwidthd 安裝到 Windows系統服務中。
  5. 「開始」--> 「我的電腦」 --> 滑鼠按右鍵 --> 「管理」 --> 「服務及應用程式」 --> 「服務」 --> 「 bandwidthd 」
  如果要停止 bandwidthd.exe 必須使用 「 Windows 工作管理員 」來直接停用四個 bandwidthd.exe。另外要注意,是否有 cygrunsrv.exe 這支程式,有的話一併Kill。 如果要把 bandwidthd 從「服務」中移除,請先把所有 bandwidthd 工作停止,然後點擊 "UnInstall Service.bat" 這支程式就可以了。
  要看統計的結果,進入 bandwidthd\htdocs 點擊 index.html 就可以看到美美統計圖形了。可以開始抓……山豬了。

本文PDF下載:



註:本文寫於2007/7/25

13 則留言:

  1. 請教一下,我在windows xp 安裝完bandwidthd後,接著
    執行index.html就出現下列資訊,請問是哪裡設定錯了嗎?
    bandwidthd has nothing to graph. This message should be replaced by graphs in a few minutes. If it's not, please see the section titled "Known Bugs and Troubleshooting" in the README
    bk_liu_00@hotmail.com

    回覆刪除
  2. This message should be replaced by graphs in a few minutes. <--不是已經回答你了嗎?

    回覆刪除
  3. 網頁開了幾個小時還是一樣
    文章所提到的將要統計的 subnet 設定上去
    是要設定為多少?我的設定如下不知是否正確?謝謝
    # subnet 10.0.0.0 255.0.0.0
    # subnet 192.168.0.0/16
    # subnet 172.16.0.0/12
    subnet 192.168.1.0/24

    回覆刪除
  4. bandwidthd比較麻煩的地方是,你必須安裝在1.「Gateway」或2.「Proxy」或3.「接在router的Mirror port」或是4.「Hub環境」的地方才會有作用,並不是接在同一個subnet就會起作用。因為你的環境我不清楚,如果bandwidthd在系統裡work成功,一般來說,如果沒有作用應該先從上面四點來下手,會比較清楚問題點在那裡,尤其是接在switch上,當然會什麼都看不到。

    回覆刪除
  5. 不好意思,再請問一下
    你說接在switch上甚麼都看不到,
    為什麼會看不到流量?
    因為對這方面不是很懂,想了解一下
    謝謝

    回覆刪除
  6. 封包1 --> Hub --> Hub下每台電腦都會收到封包1
    封包2 --> Switch --> 只有封包2的目的地電腦會收到封包2

    現在要買到純Hub已經很少了,都是Switch Hub,所以還是會以Switch模式來運作。所以在Switch下,你收不到封包,如何會有圖出現?

    一般這種工具(MRTG, PRTG, ...)都只能在特定「環境」下運作,不是你電腦裝了就算。Bandwidthd不是駭客工具,如果電腦安裝就可以看到另人在做什麼,豈不是天下大亂,那要NCC做什麼?那跟對岸要求安裝「花季護行」有什麼不一樣?

    從你一開始的訊息已經代表「軟體」已經準備好了,只是你的環境有問題。我會建議先加強TCP/IP相關知識,加油。

    回覆刪除
  7. K大您好,感謝您詳盡的說明,
    尤其是Windows安裝那一段,
    直接救了菜鳥MIS一命,您會有福報的...

    回覆刪除
  8. K大您好,目前遇到一個奇怪的問題,
    我在座位上的PC安裝完之後正常使用,可以抓到同樓層所有IP的流量。
    可是在兩台筆電安裝完之後,接同一條網路線卻抓不到任何資料,
    檢查bandwidthd服務有啟動,工作管理員內4個bandwidthd.exe、cygrunsrv.exe也全部都正常執行,
    可是不管等多久,就是抓不到任何資料,
    我的PC是賽揚3.0 + 1024RAM,
    一台筆電是AMD Mobile Turion(TM)64 + 480RAM
    另外一台是Intel Atom(TM) N270 + 1024RAM
    作業系統一樣是XP Professional,subnet 設定也一樣,
    K大知道可能是什麼原因嗎?感激不盡。

    回覆刪除
  9. 我想有幾個方向
    1. NB本身防火牆關閉看看;
    2. 檢查一下安裝目錄的權限;
    3. 裝個NetMeter,看DL(下載)的流量是否正常;
    4. 使用Wireshark安裝看看,看是否能接收到「全部的封包」。

    第3點的意思是,因為這條線路會有全部的流量,所以理應DL的流量會"很高"才是。

    第4點較難懂,較理論。

    基本上是說,當你在Hub/Proxy/Gateway/Mirror port的網路線上時,這條網路線會傳送所有(All)的封包給你,但我們「一般網卡」的模式是不會把全部封包都給放進來,只會接收「自己」的封包,其他的都Drop(放棄,不理)。

    所以在接收這台電腦的「網卡」必須"可以設定為「混亂模式」",也就是說,讓所有封包都進來這台電腦裡面。

    所以我簡單的想法是,先測試這兩台NB的網卡(因為都是內建的chip),是否能接收到「全部的封包」,照理說,如果封包能全部進來電腦裡,就能分析出圖表來。

    回覆刪除
  10. K大您好,經過測試結果如下:

    一、NB防火牆皆為關閉狀態。

    二、NB使用者皆為本機管理者。

    三、安裝NetMeter後,觀察下載流量非常小,一秒0.1~0.5kb。

    四、安裝Wireshark後,Capture的封包跳超快(一分鐘抓了6296個封包),大部份封包的Source和Destination都不是自己,不知道正不正常。

    五、網卡進階內容為:
    APS模式-關閉
    MediaType-自動
    作業卸載-開啟
    每秒IRO上限-5000
    流量控制-開啟
    框架大小上限-1514
    接收緩衝數量-50
    喚醒功能-MagicPacket & PatternMatch
    傳輸緩衝數量-2
    網路位址-不存在
    關閉狀態喚醒-關閉

    依第三點看來,這張網卡好像收不到"全部的封包",請問在設定上有什麼可以變更的部份嗎?

    回覆刪除
  11. 老大~
    我安裝完畢後,在windows server也的確可以執行~~
    可是總覺得怪怪的~~
    他抓到的流量,都好小,都只有幾k而已~~~
    該從那裡設定~來解決這問題~~

    回覆刪除
  12. 回答跟本留言第四則一樣。

    回覆刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。