2009-07-25 137 views
21

這隻需要在單個子網上工作,並且不能用於惡意使用。欺騙HTTP請求的源IP地址

我有一個用Python編寫的負載測試工具,它基本上在URL上聲明HTTP請求。我需要針對基於IP的負載平衡器運行性能測試,因此請求必須來自一系列IP。大多數商業性能工具都提供這種功能,但我想將其構建爲我自己的。

該工具使用Python的urllib2進行傳輸。是否有可能爲構成請求的數據包發送具有欺騙IP地址的HTTP請求?

+0

嗯..作爲下面的答案之一說..如果發起的IP被欺騙,TCP握手如何發生?你將使用什麼樣的網絡設置進行這種模擬? – 2009-07-25 02:52:25

回答

5

您想要設置用於連接的源地址。谷歌搜索「urllib2源地址」給出http://bugs.python.org/file9988/urllib2_util.py。我沒有嘗試過。

您正在運行的系統需要使用您正在測試的IP進行配置。

+0

這是正確的方法 - 給你的測試盒提供很多IP,並讓測試應用在它們進行連接時循環。 – caf 2009-07-29 02:02:05

5

快速筆記,我剛纔這個昨日獲悉:

我想你已經暗示你已經知道這一點,但HTTP請求的任何響應去,在標題顯示了IP地址。因此,如果您想查看這些響應,則需要控制路由器並將其設置爲使欺騙性IP全部路由回您用於查看響應的IP。

43

這是對HTTP的誤解。 HTTP協議基於TCP之上。 TCP協議依靠3路握手來初始化請求。

alt text http://upload.wikimedia.org/wikipedia/commons/archive/c/c7/20051221162333!300px-Tcp-handshake.png

不用說了,如果你欺騙你的原始IP地址,你將永遠不會過去的同步階段,沒有HTTP信息將被髮送(服務器不能將其發送到一個合法的主機)。

如果您需要測試IP負載平衡器,則不是這樣做的方法。

+0

好點。不知道如果構成這些tcp段的數據包有虛假的IP頭,tcp握手會發生。越來越脫離主題,但你將如何實現一個網絡/程序來測試和IP LB?以及像LoadRunner這樣的工具如何做到這一點? – 2009-07-25 02:54:28

1

您可以在Linux機器上使用IP別名,並根據需要設置許多IP地址。問題在於,除非將其設置爲另一個網絡併爲該網絡設置明確的路由,否則無法預測IP標頭中將標記的IP。即 -

current client address on eth0 = 192.168.1.10/24 

server-side: 
ifconfig eth0:1 172.16.1.1 netmask 255.255.255.0 

client-side: 
ifconfig eth0:1 172.16.1.2 netmask 255.255.255.0 
route add -net 172.16.1.0/24 gw 172.16.1.1 metric 0 

重複儘可能多的子網,你想要的。重新啓動apache以在所有新的別名界面上設置監聽器,然後關閉並運行。

1

我建議您看看您是否可以配置您的負載均衡器,使其基於X-Forwarded-For標頭而不是包含HTTP請求的數據包的源IP來決定。我知道大多數重要的商業負載均衡器都具有這種能力。

如果你不能這樣做,那麼我建議你可能需要配置一個帶有整個輔助IP堆的linux盒子 - 不要在LB上配置靜態路由,只是讓你的Linux盒子成爲默認LB設備的網關。