如何自动测量两台主机之间的带宽使用情况

我有一个具有TCP客户端和服务器的应用程序。 我在不同的机器上设置了客户端和服务器。 现在我想测量消耗了多less带宽(在单次运行应用程序期间发送和接收的字节数)。 我发现wireshark就是这样一个工具,可以帮助我获得这个统计数据。 然而,wireshark似乎是GUI依赖的。 我想要的是一种自动测量和报告这个统计数据的方法。 我不在乎有关Wireshark捕获的单个数据包的信息。 我不需要这些信息。 是否有一些方法来运行wireshark,以便它所做的只是写入文件,两个主机之间发送和接收的应用程序在两端运行的总字节数?

另外,有没有更好的方法来捕捉这个统计? 通过netstat或/ proc / dev / net或其他工具?

我的两台机器都安装有Ubuntu 10.04或更高版本。

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表示连接状态。 请参阅文档以获取所有可能的字段值。 一些重要的价值是:

  • S0 :看到连接尝试,没有回复。
  • S1 :建立连接,未终止。
  • SF :正常建立和终止。 请注意,这是与状态S1相同的符号。 你可以把两者区分开来,因为对于S1,汇总中不会有任何字节计数,而对于SF,则会有。
  • REJ :连接尝试被拒绝。