2

I have the following need:

  • Simulate 1K (or more) web clients (i.e., http requests) to an ip address.
  • Each client has to use a different mac as source.
  • Solution has to be somewhat realistic, i.e., i am hoping to get (under fundamental limits) maximum simultaneous requests from this clients.
  • All this in the same machine
  • Using linux.

My Question: How can I do this maximising the number of users and requests per second?

I am quite certain (99% :)) of what I am doing. I really need these requests to be send with a different mac address as source since it is a special use case based on OpenFlow switches. But it is irrelevant to expand this scenario into the question.

P.S. I am currently working in python using the Eventlet Networking Library. Python/Eventlet is not a requirement, but I include it here since i have a certain urgency and a fast implementation/modification of my code would be beneficial. I was thinking that maybe i could associate virtual interfaces with different mac addresses but i am lacking a way to specify the request interface.

4

1 回答 1

2

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

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

据我所知,如果eventlet.connect不深入挖掘,您将无法轻易提供特定的界面libevent。但是你可以很容易地给出一个本地地址(IP、端口)。eventlet.connect接受一个bind参数,该参数接受一个本地地址并绑定到它。

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

我不完全确定这将如何运作,但它应该有效。试试看。

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

如果您不在您控制的 NAT 后面,只需抛出一个。您甚至可以在同一台机器上的真实接口上运行它,并将其设置为虚拟接口的路由器而不是网桥。

但是,一旦你这样做了……你可能不需要1000 个虚拟接口,或者在你的eventlet代码中做任何事情。如果您只是将 NAT 配置为随机分配 MAC 地址,那么您可能已经完成了。我对此并不积极;它可能会尝试变得聪明,并在很短的时间内将多个连接处理到相同的(主机、端口)作为路由的相同连接,这会妨碍你。但是,再试一次,看看。

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

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

于 2013-03-21T00:53:49.523 回答