26

这只需要在单个子网上工作,不用于恶意使用。

我有一个用 Python 编写的负载测试工具,它基本上会在 URL 处爆炸 HTTP 请求。我需要针对基于 IP 的负载均衡器运行性能测试,因此请求必须来自一系列 IP。大多数商业性能工具都提供此功能,但我想将其构建到我自己的中。

该工具使用 Python 的 urllib2 进行传输。是否可以为构成请求的数据包发送带有欺骗 IP 地址的 HTTP 请求?

4

5 回答 5

48

这是对HTTP的误解。HTTP 协议基于TCP之上。TCP 协议依赖于 3 次握手来初始化请求。

替代文字 http://upload.wikimedia.org/wikipedia/commons/archive/c/c7/20051221162333!300px-Tcp-handshake.png

不用说,如果您欺骗您的原始 IP 地址,您将永远无法通过同步阶段并且不会发送任何 HTTP 信息(服务器无法将其发送到合法主机)。

如果您需要测试 IP 负载均衡器,这不是执行此操作的方法。

于 2009-07-25T01:46:29.263 回答
6

快速说明,正如我昨天刚刚学到的那样:

我认为您已经暗示您已经知道这一点,但是对 HTTP 请求的任何响应都会转到标题中显示的 IP 地址。因此,如果您想查看这些响应,您需要控制路由器并对其进行设置,以便将欺骗的 IP 全部路由回您用于查看响应的 IP。

于 2009-07-25T01:27:55.730 回答
5

您要设置用于连接的源地址。谷歌搜索“urllib2 源地址”给出http://bugs.python.org/file9988/urllib2_util.py。我没试过。

您正在运行的系统需要使用您正在测试的 IP 进行配置。

于 2009-07-25T01:15:44.450 回答
1

我建议你看看你是否可以配置你的负载均衡器来根据 X-Forwarded-For 标头做出决定,而不是包含 HTTP 请求的数据包的源 IP。我知道大多数重要的商业负载均衡器都具有此功能。

如果你不能这样做,那么我建议你可能需要配置一个带有一大堆辅助 IP 的 linux 机器 - 不要在 LB 上配置静态路由,只需将你的 linux 机器设置为 LB 的默认网关设备。

于 2009-07-27T01:46:10.637 回答
1

您可以在 Linux 机器上使用 IP 别名并设置任意数量的 IP 地址。问题是,除非您将其设置到另一个网络并为该网络设置显式路由,否则您无法预测 IP 标头中将标记什么 IP。IE -

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 以在所有新的别名接口上设置侦听器,然后您就可以关闭并运行了。

于 2009-07-25T02:50:19.653 回答