监视并收集TCP连接到src或dst主机的统计信息

我想收集两台主机(A和B)之间发送的TCP / UDP数据包的统计数据。 我正在寻找一个安装在A和B上的工具来获取以下信息:

  • 千比特/秒
  • 包/秒
  • (累计)字节发送到目前为止
  • (累积)数据包发送到目前为止
  • 平滑的窗口

iptraf ,但我很难从命令行configuration它。 tcptrack不汇总数据…我有点失落..:DI可以脚本tcpdump:/

也许,我很想念一些非常明显的事情。

更新:两台服务器运行Ubuntu 14.04。

更新2:我现在用tcpflow(日志增长非常快)实验,我将检查collectId

更新3:跟踪给定的IP或networking的stream量最简单的方法是使用IPTABLES和IPTABLES collectD插件。

这是一个非常有趣的问题。
答案取决于你的networking设置,但是,我会尽力掩盖一些情况。
我相信CollectD是答案的一部分。

首先,因为您希望每秒收集一次度量标准,所以您需要configurationCollectD Interval值

解决schemeN°1 – ServerA在特定的接口上独占地与ServerB通信吗? (反之亦然)
使用Interface插件安装CollectD。 它将“收集”你所需要的一部分:

  • 千比特/秒
  • 包/秒
  • (累计)字节发送到目前为止
  • (累积)数据包发送到目前为止

将CollectD指标转发到时间序列数据库(如Graphite)。
您将能够可视化这些指标并应用移动平均函数 。 它将符合您的需求:

  • 平滑的窗口

解决schemeN°2 – ServerA是否只在TCP和特定端口上与ServerB通信? (反之亦然)
非常相似。 使用CollectD并仅使用CollectD和TCPConns插件监视特定TCP端口上的stream量。 另外,使用Graphie作为“ 滑动窗口中的平均值 ”

一种方法是使用tshark

请执行下列操作 :

  1. 使用tshark / tcpdump / whatever生成一个pcap格式的文件,用相关的filter捕获stream量。
  2. 完成后,在捕获文件上运行tshark选项-z

然后 :

  • 每秒获得数据包和字节速率:

    tshark -q -r myfile.cap -z io,stat,1

这会产生这样的事情:

 ============================= | IO Statistics | | | | Interval size: 1 secs | | Col 1: Frames and bytes | |---------------------------| | |1 | | Interval | Frames | Bytes | |---------------------------| | 0 <> 1 | 29 | 2026 | | 1 <> 2 | 35 | 2440 | | 2 <> 3 | 35 | 2440 | | 3 <> 4 | 43 | 2920 | | 4 <> 5 | 93 | 5776 | | 5 <> 5 | 77 | 25758 | ============================= 
  • 获得数据包和字节聚合以及平均TCP窗口:

    tshark -q -r myfile.cap -z io,stat,0,"AVG(tcp.window_size)tcp.window_size"

结果会是这样的:

 ============================================== | IO Statistics | | | | Interval size: 5.109 secs (dur) | | Col 1: Frames and bytes | | 2: AVG(tcp.window_size)tcp.window_size | |--------------------------------------------| | |1 |2 | | | Interval | Frames | Bytes | AVG | | |-----------------------------------------| | | 0.000 <> 5.109 | 312 | 41360 | 41363 | | ============================================== 

现在,如果TCP的窗口平均大小超出了方程(如果没有工具检查stream量,您将无法获得此指标),则可以使用标准监视工具来绘制任何您想要的关于使用任何协议的数据包速率/聚合的示例仙人掌 。

编辑:不知道你的意思是滑动窗口给(upvoted)其他答案。 如果您的意思是指在某个特定时间(而不是TCP窗口大小)开始的指定时间的平均值,则您可以通过使用tshark命令投掷datefilter来完成整个过程。

但是,你似乎只是在寻求一个全球性的监控解决scheme。 仙人掌,collectd,zabbix,shinken,nagios(与icinga或类似的东西)应该可以满足您的需求和定制,足以根据需要过滤特定的stream量。

为两台服务器创build一个端口镜像,并从两台计算机上运行wireshark以收集数据。 因此,这不会影响您的服务器在生产。

我的解决scheme运行1-2小时testing:

  • tcpflow收集TCPstream量,我使用tcpflow -i eth0 -FT在结果文件名中有时间戳记
  • parsingreport.xml(DFXML)在closures的连接上创build报告
  • 使用捕获的stream量parsing文件名+logging其大小,以在测量期间报告正在进行的连接
  • 使用matplotlib来绘制graphics

优点:

  • 发生了什么详细的观点

坏处:

  • 捕获stream量的文件增长非常快