2013-03-21 71 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地址,而網絡服務器軟件根本看不到任何東西,所以......我不得不對你可能試圖測試的東西做一些假設,而且我很可能走錯了方向。如果是這樣,你可能想要更好地描述你的用例。