如何在保证顺序和可控速度的情况下同时 mcast 多个 pcap 文件?

网络工程 多播 linux 电容
2021-07-20 03:54:51

我们每天在许多不同的多播组上捕获许多 pcap 文件。出于测试和基准测试的目的,我们希望在隔离环境中以受控方式重放这些文件。这些 pcap 文件是同时捕获的,但位于不同的多播组和端口上。

我想按照数据包的记录顺序和不同的(和指定的)多播组将这些文件重播回网络(可能使用 ttl=0 或 1)。此排序必须在所有正在播放的文件中同步

例如,假设我们有两个捕获文件,foo.pcap以及bar.pcap. 我们想foo.pcap在 mcast 组 239.255.0.1:30001 上重放数据包,并且bar.pcap应该在 239.255.0.2:30002 上重放数据包。

foo.pcap在时间偏移量 0、1 和 5 处 bar.pcap记录数据包。在时间偏移量(相对于foo.pcap)3、4 和 5处记录数据包

所以,我正在寻找的是重播这些数据包的方式在翻过两个同步的顺序foo.pcapbar.pcap换句话说,从第2包foo.pcap应该走出去到239.255.0.1:30001,然后从第一个两包bar.pcap应该出去239.255.0.2:30002,然后从过去的数据包foo.pcap应该走出去的同时(或接近它)作为来自bar.pcap.

我们还需要能够调整数据包的重放速率。例如,以记录的速度;10 倍记录速度;1 GB/秒;等等。

我怎样才能做到这一点?

我已经研究过诸如tcpreplaybittwist 之类的工具,但这些工具要么不会在不同的组上发送,要么不会在所有文件中同步出口顺序。

我将只在 Linux 上工作(主要是 RHEL 6.5 和 Ubuntu 12.04)

2个回答

我对此的想法是,首先,如果您在一个地方捕获流量(如果可以,如果您有一台捕获机器/设备连接到两个 mcast 组),您就没有必须重播两个不同捕获的复杂性文件彼此及时。

其次,您可以编辑数据包捕获,以便在您“播放”它们时将数据包发送到重写的目标地址(不同的 mcast 组)。

你能不能看看你是如何捕获和重放数据包的,看看这个场景是否可以简化?即使您必须分离捕获文件,您也可以从同一台机器/设备播放它们;一个有两个连接回 mcast 网络,因此它可以播放到两个不同的 mcast 组。

我认为您需要对问题和现有解决方案进行一些额外的研究,进一步完善您的问题。否则上面的信息就是我的答案。

我在使用tcpreplaymergecap(与 Wireshark 一起分发的工具之一)之前做过这种事情第一步是使用tcprewrite(tcpreplay 的一部分)将 foo.pcap 的目标 IP 编辑为您要发送的第一个地址,将 bar.pcap 编辑为第二个。然后使用mergecap按时间顺序合并数据包,以便按照您想要的方式将它们交错。请注意,在使用 mergecap 时,您可能需要首先编辑数据包的时间戳(例如,如果您在 bar.pcap 前一天使用 foo.pcap,它们将不会交错)。在这种情况下,您可以使用editcap(来自wireshark 的另一个工具)来修改数据包时间。

真正困难的部分是使用您想要的时间选项播放它们。根据原始捕获的速度以及您对方差的容忍度,您可能只需使用tcpreplay --multiplier=XXX. 但是,如果流量速度很快,或者您需要非常精确,那么除非您投资 Spirent 或 Ixia 等供应商的特殊硬件,否则您将不走运。请注意,如果您确实购买了其中一种工具,它们具有可以在设置过程中为您完成所有数据包操作的实用程序。