2012-04-08 65 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

相关问题