2012-04-08 60 views
1

我有一個具有TCP客戶端和服務器的應用程序。我在不同的機器上設置了客戶端和服務器。現在我想測量消耗的帶寬(單次運行應用程序期間發送和接收的字節數)。我發現wireshark就是這樣一個工具,可以幫助我獲得這個統計數據。然而,wireshark似乎是GUI依賴的。我想要的是一種自動測量和報告此統計信息的方法。我不在乎有關wireshark捕獲的單個數據包的信息。我不需要這些信息。是否有某種方式可以運行wireshark,以便它能夠寫入文件,在兩端運行應用程序時兩個主機之間發送和接收的總字節數?如何自動測量兩個主機之間的帶寬使用情況

另外,有沒有更好的方法來捕捉這個統計?通過netstat或/ proc/dev/net或任何其他工具?

我的兩臺機器都安裝有ubuntu 10.04或更高版本。

回答

1

Bro是測量面向連接的統計信息的適當工具。您可以記錄您的應用程序通信的痕跡或分析它實時:

bro -r <trace> 
bro -i <interface> 

此後,看看在發送的字節數量相同的目錄連接日誌(conn.log)和應用程序接收。具體而言,您對TCP有效負載大小感興趣,conn.log通過列orig_bytesresp_bytes公開。下面是一個例子:

bro-cut id.orig_h id.resp_h conn_state orig_bytes resp_bytes < conn.log | head 

這產生以下輸出:

192.168.1.102 192.168.1.1  SF  301  300 
192.168.1.103 192.168.1.255 S0  350  0 
192.168.1.102 192.168.1.255 S0  350  0 
192.168.1.103 192.168.1.255 S0  560  0 
192.168.1.102 192.168.1.255 S0  348  0 
192.168.1.104 192.168.1.255 S0  350  0 
192.168.1.104 192.168.1.255 S0  549  0 
192.168.1.103 192.168.1.1  SF  303  300 
192.168.1.102 192.168.1.255 S0  -  - 
192.168.1.104 192.168.1.1  SF  311  300 

的每一行代表一個單獨的連接,傳輸層端口刪去。最後兩列表示始發者(第一列)和響應者(第二列)發送的字節。列conn_state代表連​​接狀態。有關所有可能的字段值,請參閱documentation。一些重要的參數是:

  • S0:看到連接嘗試,沒有回答。
  • S1:已建立連接,未終止。
  • SF:正常建立和終止。請注意,這與符號S1的符號相同。你可以將兩者區分開來,因爲對於S1來說,彙總中不會有任何字節數,而對於SF則會有。
  • REJ:連接嘗試被拒絕。
+0

我會詳細介紹一下文檔,但是快照中的最後兩列代表在該行列出的主機之間分別發送和recd的淨字節數? – AnkurVj 2012-04-08 21:31:42

+0

正確。每個流程表示一個連接/流程。 (我澄清了答案。) – mavam 2012-04-08 21:52:01

+0

你能告訴我,一旦我開始bro使用bro -i eth0,我該如何停止捕獲數據包。我目前使用Ctrl + C來停止進程並希望所有統計信息都已寫入文件。 – AnkurVj 2012-04-13 08:40:27

相關問題