Python 模拟以不同mac地址作为源的1K web客户端

Python 模拟以不同mac地址作为源的1K web客户端,python,linux,simulation,eventlet,Python,Linux,Simulation,Eventlet,我有以下需要: 将1K(或更多)web客户端(即http请求)模拟为ip地址 每个客户端都必须使用不同的mac作为源 解决方案必须是现实的,也就是说,我希望(在基本限制下)从这个客户端获得最大的同时请求 所有这些都在同一台机器里 使用linux 我的问题是:如何使每秒的用户和请求数量最大化 我很肯定(99%:)我在做什么。我真的需要用不同的mac地址作为源发送这些请求,因为这是一个基于OpenFlow交换机的特殊用例。但将这一情景扩展到这个问题上是无关紧要的 附言。 我目前使用的是pytho

我有以下需要:

  • 将1K(或更多)web客户端(即http请求)模拟为ip地址
  • 每个客户端都必须使用不同的mac作为源
  • 解决方案必须是现实的,也就是说,我希望(在基本限制下)从这个客户端获得最大的同时请求
  • 所有这些都在同一台机器里
  • 使用linux
我的问题是:如何使每秒的用户和请求数量最大化

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

附言。 我目前使用的是python。Python/Eventlet不是一个需求,但我在这里包括它,因为我有一定的紧迫性,快速实现/修改我的代码将是有益的。我在想,也许我可以将虚拟接口与不同的mac地址相关联,但我缺少一种指定请求接口的方法

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

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

据我所知,如果不深入挖掘下面的
libevent
,就很难为
eventlet.connect提供特定的接口。但是您可以很容易地提供本地地址(IP、端口)。获取一个
bind
参数,该参数获取一个本地地址并绑定到该地址

所以,如果您只需为每个虚拟接口提供不同的IP地址,并通过真实接口将它们桥接起来,那么您就只需要这些了

我不完全确定这会起多大作用,但它应该起作用。试试看

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

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

但是,一旦您这样做了……您可能就不需要1000个虚拟接口,或者根本不需要在
eventlet
代码中执行任何操作。如果您只是将NAT配置为随机化MAC地址,则可以完成此操作。我对此并不乐观;它可能会尝试智能化,并在短时间内将多个到同一个(主机、端口)的连接视为路由的同一连接,这将在这里阻碍您。不过,还是试试看吧

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


同时,请记住,在现实生活中,web服务器的主机只会看到它连接到internet的路由器的MAC地址,而web服务器软件根本看不到任何内容,因此…我不得不对您可能要测试的内容做出一些假设,我很可能走错了方向。如果是这样,您可能希望更好地描述您的用例。

您在这里到底想测试什么?MAC地址通常对web服务器不可见(或没有意义!),因此我不确定您想要实现什么。@Daskwuff:我假设他正在测试一种类似于大型IP负载平衡器的东西,它根据请求到达的本地路由器进行区分。但现在我想起来了,这是一个基于实际问题的相当大的假设……我正在openflow控制器上测试负载平衡器和设备管理器应用程序。我非常确定我需要有不同的mac地址(并且ip地址实际上是不相关的)。我不想把问题过分复杂化。