2013-03-21 68 views
1

我有以下需求:模拟不同的MAC地址1K Web客户端的源

  • 模拟1K(或更多)的Web客户端(即,HTTP请求)的IP地址。
  • 每个客户端都必须使用不同的mac作为源。
  • 解决方案必须有些现实,也就是说,我希望得到(在基本限制下)来自这些客户端的最大同时请求。
  • 所有这一切在同一台机器
  • 使用Linux。

我的问题:如何最大限度地提高用户数和每秒请求数?

我很确定(99%:))我在做什么。我真的需要这些请求以不同的MAC地址作为源,因为它是基于OpenFlow交换机的特殊用例。但将这种情况扩展到问题是无关紧要的。

P.S. 我目前使用的是使用Eventlet Networking Library的python。 Python/Eventlet不是必需的,但是我将它包含在这里,因为我有一定​​的紧迫感,并且快速实现/修改我的代码将会有所帮助。我在想,也许我可以将虚拟接口与不同的MAC地址相关联,但我缺乏一种指定请求接口的方法。

+0

你究竟想在这里测试什么? MAC地址通常对Web服务器不可见(或有意义!),所以我不确定你想要完成什么。 – duskwuff 2013-03-21 00:56:02

+0

@duskwuff:我认为他正在测试类似于BIG-IP负载平衡器的东西,该负载平衡器根据其本地路由器中哪些请求正在进行区分。但现在我想到了,这是一个基于实际问题的非常大的假设... – abarnert 2013-03-21 01:03:33

+0

我正在测试openflow控制器上的负载均衡器和设备管理器应用程序。我很确定我需要有不同的MAC地址(并且IP地址实际上是不相关的)。我不想让问题过于复杂。 – fabiim 2013-03-21 01:06:44

回答

2

我在想,也许我可以将虚拟接口与不同的MAC地址相关联,但我缺少一种指定请求接口的方法。

如果你的意思是创建1000个虚拟接口都绑定到一个单一的真实接口,每个都有一个不同的假MAC地址,是的,你可以这样做。

据我所知,如果不深入下面libevent,您不能轻易给出eventlet.connect的特定界面。但你可以非常容易给一个本地地址(IP,端口)。 eventlet.connect需要bind参数,该参数需要一个本地地址并绑定到该地址。

因此,如果您只是给每个虚拟接口分配一个不同的IP地址,并通过您的真实接口桥接它们,那应该就是您所需要的。

我并不完全确定那么好吧这样会工作,但应该工作。试试看看。

有一个明显的缺点:您需要1000个可路由的IP地址。但假设你在一个你控制的NAT后面,那很简单 - 例如10.0.xy.1zw。

如果你不是在你控制的NAT后面,只需要扔掉一个。你甚至可以在同一台机器上,在真实的界面上运行它,只需将它作为虚拟接口的路由器而不是网桥。

但是,一旦你这样做......你可能不需要需要 1000个虚拟接口,或者在你的eventlet代码中做任何事情。如果您只是将NAT配置为随机分配MAC地址,则可能已完成。我对此并不积极,它可能会尝试变得聪明,并将短距离内的多个连接视为同一个连接(主机,端口)进行路由,这将以您的方式进入。但是,再次尝试一下,看看。

无论哪种方式,当然,服务器会将它们视为来自同一NAT路由器的1000个客户端。没有办法解决这个问题(除非你真的在互联网的不同部分有1000个地址)不会欺骗。但是,除非你试图欺骗服务器中的某些逻辑,而不是模拟一些行为,这应该没有什么区别。

同时,请记住,在现实生活中,网络服务器的主机只会看到连接到互联网的路由器的MAC地址,而网络服务器软件根本看不到任何东西,所以......我不得不对你可能试图测试的东西做一些假设,而且我很可能走错了方向。如果是这样,你可能想要更好地描述你的用例。