我有一个具有 TCP 客户端和服务器的应用程序。我在不同的机器上设置客户端和服务器。现在我想测量消耗了多少带宽(在应用程序的单次运行期间发送和接收的字节数)。我发现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_bytes
and resp_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:连接尝试被拒绝。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)