欺骗 HTTP 请求的源 IP 地址
Posted
技术标签:
【中文标题】欺骗 HTTP 请求的源 IP 地址【英文标题】:Spoofing the origination IP address of an HTTP request 【发布时间】:2010-11-13 22:21:26 【问题描述】:这只需要在单个子网上工作,不用于恶意使用。
我有一个用 Python 编写的负载测试工具,它基本上可以在 URL 上爆炸 HTTP 请求。我需要针对基于 IP 的负载均衡器运行性能测试,因此请求必须来自一系列 IP。大多数商业性能工具都提供此功能,但我想将其构建到我自己的中。
该工具使用 Python 的 urllib2 进行传输。是否可以为构成请求的数据包发送带有欺骗 IP 地址的 HTTP 请求?
【问题讨论】:
hmm .. 正如下面的答案之一所说.. 如果原始 ip 被欺骗,TCP 握手将如何发生?对于这样的模拟,你会运行什么样的网络设置? 【参考方案1】:这是对 HTTP 的误解。 HTTP 协议基于TCP。 TCP 协议依赖于 3 次握手来初始化请求。
alt text http://upload.wikimedia.org/wikipedia/commons/archive/c/c7/20051221162333!300px-Tcp-handshake.png
不用说,如果您伪造您的原始 IP 地址,您将永远无法通过同步阶段,也不会发送任何 HTTP 信息(服务器无法将其发送到合法主机)。
如果您需要测试 IP 负载平衡器,这不是这样做的方法。
【讨论】:
好点。不知道如果组成这些 tcp 段的数据包具有虚假的 ip 标头,tcp 握手将如何发生。跑题了,但是你将如何实现一个网络/程序来测试和 IP LB?以及像 LoadRunner 这样的工具是如何做到这一点的? 我不知道 LoadRunner 是什么,但我猜他们使用的 NAT 需要对原始数据包进行低级别访问,从而动态重写传入的源数据包和出站的目标数据包。为此,您可能必须安装 PCAP en.wikipedia.org/wiki/Pcap。但我警告你,它不像使用 urllib2 那样容易。顺便说一句,看到这里有多少人不知道他们在说什么,这也很有趣,而且我被否决了两次。 我想很多程序员都不知道网络在底层是如何工作的,不用担心。【参考方案2】:请注意,正如我昨天刚刚学到的那样:
我认为您已经暗示您已经知道这一点,但是对 HTTP 请求的任何响应都会转到标题中显示的 IP 地址。因此,如果您想查看这些响应,您需要控制路由器并对其进行设置,以便将被欺骗的 IP 全部路由回您用于查看响应的 IP。
【讨论】:
【参考方案3】:您要设置用于连接的源地址。谷歌搜索“urllib2 源地址”给出http://bugs.python.org/file9988/urllib2_util.py。我没试过。
您正在运行的系统需要使用您正在测试的 IP 进行配置。
【讨论】:
这是正确的方法 - 为您的测试盒提供多个 IP,并让测试应用在建立连接时循环它们。【参考方案4】:我建议你看看你是否可以配置你的负载均衡器来根据 X-Forwarded-For 标头而不是包含 HTTP 请求的数据包的源 IP 来做出决定。我知道大多数重要的商业负载均衡器都具有此功能。
如果你不能这样做,那么我建议你可能需要配置一个带有一大堆辅助 IP 的 linux 机器 - 不要费心在 LB 上配置静态路由,只需将你的 linux 机器设置为默认网关LB 设备。
【讨论】:
【参考方案5】:您可以在 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 以在所有新的别名接口上设置侦听器,然后您就可以关闭并运行了。
【讨论】:
以上是关于欺骗 HTTP 请求的源 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章
DNS反射放大攻击分析——DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大流量,伪造请求包的源IP地址为受害者IP,将应答包的流量引入受害的服务器