1

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

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

我的两台机器上都运行了 ubuntu 10.04 或更高版本。

4

1 回答 1

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

  • S0:看到连接尝试,没有回复。
  • S1:连接已建立,未终止。
  • SF:正常建立和终止。请注意,这与状态 S1 的符号相同。您可以将两者区分开来,因为对于 S1,摘要中不会有任何字节数,而对于 SF,会有。
  • REJ:连接尝试被拒绝。
于 2012-04-08T21:24:42.557 回答