模拟1K个不同MAC地址的网页客户端作为来源
我有以下需求:
- 模拟1000个(或者更多)网页客户端,也就是发送http请求到一个IP地址。
- 每个客户端必须使用不同的MAC地址作为来源。
- 这个解决方案要尽量真实,也就是说,我希望能在基本限制下,尽可能多地同时发送请求。
- 所有这些都在同一台机器上进行。
- 使用Linux操作系统。
我的问题是:我该如何做到,才能最大化用户数量和每秒请求数?
我对自己在做的事情相当有信心(99% :))。我真的需要这些请求使用不同的MAC地址发送,因为这是基于OpenFlow交换机的特殊用例。不过,把这个场景扩展到问题上并不重要。
附注: 我目前在使用Python,利用Eventlet网络库。虽然Python/Eventlet并不是必须的,但我提到它是因为我有点紧急,快速实现或修改我的代码会很有帮助。我在想,也许我可以将虚拟接口与不同的MAC地址关联,但我缺少指定请求接口的方法。
1 个回答
我在想,也许我可以把虚拟接口和不同的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地址,网络服务器软件根本看不到任何东西,所以……我不得不对你可能想测试的内容做一些假设,可能我完全偏离了方向。如果是这样,你可能需要更好地描述一下你的使用场景。