代码之家  ›  专栏  ›  技术社区  ›  Erich Mirabal

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

  •  -1
  • Erich Mirabal  · 技术社区  · 17 年前

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

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

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

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

    如果可行,是否可行 RFC826 (另加) 5227 和 5494 )关于ARP的最新文件?有更好的文件吗?

    节点是虚拟机(它们可能是 桥上还是桥上?

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

    3 回复  |  直到 5 年前
        1
  •  4
  •   Kevin Nisbet    17 年前

    从技术上讲,你可以使用ARP中毒来做这件事,但是我真的不认为我会推荐它。我真的不明白你为什么要这么做,但从它的声音来看,你想模拟射频设备可能导致的数据包丢失/损坏类型。

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

    我看到你注意到你控制着路由器和实验室。我不知道Cisco是否对这个功能有最低要求,但你可以指向一个接口的静态路由。所以,如果你把你的拦截服务器挂在路由器的一个端口上,并为每台主机设置路由,让它们进入你的拦截服务器,那么它就可以接收通过路由器路由的所有流量。通过将接口定义为下一个跃点而不是IP地址来实现这一点。

    *请注意Bob McCormick的说明,它只会影响不同子网上的主机,但是存在一个简单的欺骗,在每个主机上(如果分配了静态IP地址),将子网掩码设置为/32(即255.255.255.255)。这实际上会迫使主机发送所有由路由器路由的it帧,因为它不再知道与自己在同一网络上的任何其他用户。

    但是,如果您正在做这一级别的工作,我建议您再次考虑将linux用于发送流量的主机,可能还有Bob McCormick推荐的工具。然而,在linux中,我确信可以设置大量工具来模拟您正在寻找的这类事件。

        2
  •  1
  •   Tom Ritter    17 年前

    我不是ARP中毒方面的专家,但我相信,要可靠且始终如一地实现其效果,您需要得到路由器的同意。我的意思不是法律上的同意,而是路由器会把你设置为网络上所有设备的中间人。

    编辑: 既然你控制了网络,我想你根本不需要ARP中毒。我不确定您的拓扑结构是什么样子,但对于中小型安装,我会从CISCO或同等设备切换,并研究将linux机箱作为路由器运行。然后根据需要删除/延迟/更改数据包所需的任何脚本。Linux而不是Cisco的决定可能有点敏感,我不是专家,但对于一个小型实验室来说,这不应该是什么问题。

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

        3
  •  1
  •   Bob McCormick    17 年前

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

    只有 允许您影响位于不同子网上的主机之间的通信量。

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

    推荐文章