伪造HTTP请求的源IP地址

27

这仅需要在单个子网上工作,不涉及恶意使用。

我有一个用Python编写的负载测试工具,基本上是向URL发送HTTP请求。我需要对基于IP的负载均衡器运行性能测试,因此请求必须来自一系列IP地址。大多数商业性能工具都提供此功能,但我想将其集成到自己的工具中。

该工具使用Python的urllib2进行传输。是否可能在组成请求的数据包中伪造IP地址发送HTTP请求?


哦,正如下面的一个答案所说的那样,如果源IP被欺骗了,TCP握手会发生什么?你会运行什么样的网络设置来进行这样的模拟? - Corey Goldberg
5个回答

50

这是对HTTP协议的误解。HTTP协议是基于TCP的。TCP协议需要进行三次握手才能初始化请求。

alt

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

如果您需要测试IP负载均衡器,则不能使用此方法。


好的观点。如果组成那些TCP段的数据包有伪造的IP头部,那么TCP握手会如何进行还不清楚。离题了,但是你会如何实现一个用于测试IP负载均衡器的网络/程序呢?类似LoadRunner这样的工具如何做到这一点? - Corey Goldberg
11
我不知道LoadRunner是什么,但我的猜测是它们使用一种需要对原始数据包进行低级访问的NAT技术,以实时重写传入源数据包和传出目标数据包。为此,您可能需要安装PCAP http://en.wikipedia.org/wiki/Pcap。但我警告你,这并不像使用urllib2那样容易。另外,有趣的是看到这里有多少人根本不知道他们在谈论什么,而我已经被踩了两次。 - Unknown
我猜很多程序员对于底层的网络工作原理一无所知,不用担心。 - Gert

7

快速记录,因为我昨天刚学到这个:

我认为你已经暗示你已经知道了,但是任何对HTTP请求的响应都会发送到标头中显示的IP地址。因此,如果您想查看这些响应,您需要控制路由器并设置其使所有欺骗的IP都路由回您用于查看响应的IP。


5

这是正确的方法 - 给你的测试盒子多个IP,并让测试应用程序在建立连接时循环使用它们。 - caf

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设备的默认网关即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接