-1

我们正在研究创建网络效果服务器的方法。我的意思是一个中央服务器,它将检查网络上的所有数据包并根据实际网络之外的因素(例如天气和视线)应用逻辑(丢弃、延迟、更改等)。

这与运行多个现实世界实体的模拟有关:网络中的物理节点将代表 3D 虚拟世界中的 3D 移动实体。正如我所提到的,将根据节点的“虚拟世界位置”之间的视线、距离、干扰等计算效果。

我知道其他工具可以让您执行此类效果(例如 OPNET,我们可能会将其用作解决方案的一部分),但它们通常要求您将数据直接路由到它们进行处理。它们也不处理 UDP 或 TCP。

我需要一种方法来透明地运行我们的服务器并应用效果,而无需为 UDP 和 TCP 更改任何现有软件(无论如何有些软件无法更改)。

在这种情况下,我们正在考虑使用 ARP 中毒(或欺骗,无论您喜欢如何称呼它)来强制所有流量通过这些服务器中的一个(或潜在的多个用于负载平衡)来执行数据包整形。

这是一种可行的方法吗?(不想在意识到有太多障碍或完全不可能之前花费数周时间进行开发)

如果可行,RFC826(加上52275494)是 ARP 的最新文档吗?那里有更好的文件吗?

当某些网络节点是虚拟机(它们可能被桥接或 NAT'ed)时,这会起作用吗?

是否有任何库可以让您在 C# 中执行此操作?

(我们对我们使用的语言持开放态度,但可能更喜欢基于 C# 或 Qt 的解决方案)

4

3 回答 3

4

从技术上讲,您可以使用 ARP 中毒来做到这一点,但我真的不认为我会推荐它。我真的不明白你为什么要这样做,但从它的声音来看,你正在寻找模拟可能由射频设备引起的数据包丢失/损坏的类型。

首先,您提到了 C#,它确实不是用于执行此操作的语言,低级网络距离太远了。我认为 C# 确实提供了一个原始套接字类,但是如果您尝试模拟 TCP/IP 和 UDP 并且欺骗地址不属于您的主机,它实际上会丢弃您的数据包。可能有办法阻止这种情况,但您必须研究 .Net Raw Socket。

您也可以将 WinPcap 与 ac# 包装器一起使用。但它仍然不是本机实现,可能会遭受性能损失。有一个用于 WinPcap 的 C# 包装器,我使用它称为SharpPcap,但是有些部分没有很好地实现,我必须根据需要对其进行修改。我已经做了一些简单的测试以捕获 300Mbps 的流量,但这不包括任何协议分析或将数据包注入网络。这也可以用于将数据包放回网络上,但在过去,这也是众所周知的低性能。我的网络同行普遍认为,如果没有硬件支持 Gbps 速度,就无法完成此类检查。

我看到你注意到你控制着路由器和实验室。我不知道思科是否对此功能有最低要求,但您可以将静态路由指向接口。因此,如果您将拦截服务器从路由器的一个端口挂起,并为每台主机设置路由以访问您的拦截服务器,它可能会接收通过路由器路由的所有流量。您可以通过将接口定义为下一跳而不是 IP 地址来实现此目的。

*请注意 Bob McCormick 的注释,它只会影响不同子网上的主机,但是有一个简单的作弊方法,在每台主机(如果分配了静态 IP 地址)上,将子网掩码设置为 /32(即 255.255.255.255)。这实质上将强制主机发送所有要由路由器路由的帧,因为它不再知道与自己在同一网络上的任何其他用户。

最后一个警告是我不知道这是否可以在虚拟机中工作。我认为如果您在 vmware 中使用一种类型的网络接口,它会,但我没有尝试过,并且不知道其他虚拟机提供商。

但是,如果您正在做这个级别的工作,我建议您再次考虑使用 linux 作为您发送的主机,您也可以使用 Bob McCormick 推荐的工具。但是,在 linux 中,我确信可以设置大量工具来模拟您正在寻找的此类事件。

于 2009-05-04T03:07:27.110 回答
1

我不是 ARP 中毒方面的专家,但我相信要可靠且一致地实现其效果,您需要路由器的同意。我的意思不是在合法性方面同意,而是同意路由器实际上会将您设置为网络上所有设备的中间人。

有这种可能吗?

编辑: 由于您控制网络,我认为您根本不需要 ARP 中毒。我不确定您的地形是什么样的,但对于中小型设置,我会从 CISCO 或同等设备切换并研究将 linux 机器作为路由器运行。然后根据需要丢弃/延迟/更改数据包所需的任何脚本。Linux而不是Cisco的决定可能有点棘手,我不是专家,但对于一个小型实验室来说,这应该不是任何问题。

我个人使用shorewall(iptables的前端)来分割我的网络并在段之间丢弃/拒绝/允许数据包。将其连接到使用由外部因素控制的脚本将是很多 iptables 工作以动态添加和删除规则,但肯定是可行的。

免责声明:我从未使用过 Cisco 设备,所以我不知道它们具有哪些高级功能。也许他们能够运行这样的高级逻辑,如果是这样,那就更好了——我只是假设他们没有。

于 2009-04-27T18:35:21.197 回答
1

欺骗永远不会是可靠的。这基本上是您与您正在欺骗的 IP 地址的合法所有者之间的竞赛。

请注意,任何涉及使用路由器的配置,例如使用 linux 路由器的建议等,只会让您影响不同子网上的主机之间的流量。

如果这对您有用,我可以建议您从Linux 内核中的 Netem 功能( http://www.linuxfoundation.org/en/Net:Netem )开始吗?Netem 将允许您控制 Linux 内核转发的任何数据包的带宽、延迟、抖动、数据包重新排序等。我已经多次使用它来模拟 Cisco 路由器之间的 WAN 特性以测试 QOS 配置。

于 2009-05-02T03:12:20.453 回答