你可以使用ARP中毒(欺骗)来应用模拟的外部效果吗?

时间:2009-04-27 18:29:21

标签: c# networking spoofing arp

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

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

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

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

在这种程度上,我们考虑使用ARP中毒(或欺骗,无论你喜欢称之为),强制所有流量通过这些服务器中的一个(或可能多个用于负载平衡)来执行数据包整形。

  

这是一种可行的方法吗? (不要花费数周的时间才能意识到有太多的障碍,或者说这是不可能的事情)

     

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

     

这会在一些网络上运行吗?   节点是虚拟机(他们可能会   是桥接还是NAT?)

     

是否有任何库允许您在C#中执行此操作?

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

3 个答案:

答案 0 :(得分:4)

从技术上讲,你可以使用ARP中毒来做到这一点,但我真的不认为我会推荐它。我真的不明白为什么你要这样做,但从它的声音,你想要消除可能由RF设备引起的丢包/损坏的类型。

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

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

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

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

最后一点需要注意的是,我不知道这是否适用于虚拟机。我想如果你在vmware中使用一种类型的网络接口,但我没有尝试过,也不知道其他虚拟机提供商。

但是,如果你正在做这个级别的工作,我会建议你再次使用linux作为你发送给你流量的主机,也许是Bob McCormick推荐的工具。但是,在linux中,我确信有很多工具可以设置来模拟你正在寻找的这类事件。

答案 1 :(得分:1)

我不是ARP中毒方面的专家,但我相信为了可靠而持续地实现其效果,您需要得到路由器的同意。我并不是说在合法性方面的同意,而是同意路由器实际上会让你成为网络上所有设备的中间人。

这是可能的吗?

编辑:由于您控制网络,我认为您根本不需要ARP中毒。我不确定你的地形是什么样的,但对于小型/中型设置,我会从CISCO或同等设备切换并调查运行Linux机箱作为路由器。然后根据需要丢弃/延迟/改变数据包所需的任何脚本。 Linux而不是思科的决定可能有点敏感,我不是专家,但对于小型实验室而言,它不应该是任何问题。

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

免责声明:我从未使用过思科设备,因此我不知道他们能够使用哪些高级功能。也许他们能够像这样运行高级逻辑,如果是这样,那就更好了 - 我只是假设他们没有。

答案 2 :(得分:1)

欺骗永远不可靠。这基本上是你和你正在欺骗的IP地址的合法所有者之间的竞争。

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

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