如何以编程方式提取每个TCP连接的TCP/IP计数器?

4
在过去的工作中,我曾经开发过一款工具,可以追踪以下信息:src_ip、dst_ip、src_port、dst_port、bytes_sent、bytes_received、packets_sent、packets_received、packets_retransmitted和bytes_retransmitted。它可以追踪机器上每个活动的TCP连接。当时(大约在2008年),这需要内核补丁来扩展内核跟踪的计数器。我记得听说几年前已将其集成到内核中。但是这已经很久了,我忘记了细节。
现在我又想写这样一个工具,但我不记得如何访问这些计数器/配置Linux以便跟踪此信息。
可能有一些方法可以使用netstat进行此操作,但我还没有能够在该接口中公开计数器信息。
任何使内核跟踪此信息并以合理高效的方式导出数字的方法都足够了。希望不必运行IPTables来完成它。
2个回答

0

你可以使用linux conntrack工具来进行流量统计。

我猜那就是你之前用过的工具。


0

您可以通过/proc/net/tcp获取一些套接字的信息。其他全局信息可以通过/proc/net/snmp检索。但是,我认为内核不会在每个套接字上跟踪bytes_sent、bytes_received、packets_sent、packets_received、packets_retransmitted、bytes_retransmitted。


我找到的最接近我尝试实现的是这样的一个链接: http://code.google.com/p/ipt-account/wiki/Usage但是即使这个链接也没有暴露重传值,这些信息可惜是最有趣的部分之一。看起来我之前使用的补丁可能是以前工作中定制内核的一部分。 - jlyons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接