模拟具有不同mac地址的1K Web客户端作为源

时间:2013-03-21 00:41:22

标签: python linux simulation eventlet

我有以下需要:

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

我的问题:我怎样才能最大限度地提高每秒的用户数和请求数?

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

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

1 个答案:

答案 0 :(得分:2)

  

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

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

据我所知,如果不深入挖掘eventlet.connect下面的libevent,您就无法轻松地为bind提供特定界面。但是可以非常容易地提供本地地址(IP,端口)。 eventlet.connect采用eventlet参数,该参数采用本地地址并绑定到它。

因此,如果您只是为每个虚拟接口提供不同的IP地址,并通过您的真实接口将它们连接起来,那么这应该就是您所需要的。

我不完全确定这是如何工作的,但它应该工作。试试吧,看看。

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

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

但是,一旦你这样做了......你可能不会需要 1000个虚拟接口,或者在你的{{1}}代码中做任何事情。如果您只是将NAT配置为随机化MAC地址,则可能已完成。我对此并不乐观;它可能会尝试智能化并在短时间内将多个连接视为与路由相同的连接(主机,端口),这将妨碍您的到来。但是,再试一次,看看。

当然,无论哪种方式,服务器都会将它们视为来自同一NAT路由器的1000个客户端。没有办法绕过这个(除非你在互联网的不同部分实际上有1000个地址)没有欺骗。但是,除非你试图在服务器中实际欺骗某些逻辑,而不仅仅是模拟某些行为,否则这应该没有任何区别。

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