想象一下:
用户转到脚本(http://sample.org/test.php
),
脚本向其他页面(http://google.com/
)发送HTTP请求。对于此示例,我们将使用curl
。
该脚本通过CURLOPT_INTERFACE
将请求的IP地址设置为用户的IP。
我已经知道请求脚本不会收到响应,因为远程主机会向请求中给出的IP地址发送任何响应。
我想知道这个回应会发生什么?假设客户端位于具有一个外部地址的LAN上,并且发送到该IP的所有流量都由充当DHCP服务器的路由器处理,响应是否会回复到用户的计算机?如果确实如此,是否有任何方法可以确保用户的浏览器处理它?如果是这样,浏览器将如何处理这个问题?它会打开谷歌的新窗口吗?
我肯定会对这个问题采取后续行动,但在我进一步实验之前,我非常好奇这个级别的情况。
答案 0 :(得分:4)
- 该脚本通过CURLOPT_INTERFACE将请求的IP地址设置为用户的IP。
通常,这不起作用。您的ISP知道您应该拥有哪个IP地址,并且不会转发来自“虚假”IP地址的流量。
特别是,由于您只能与假IP进行单向通信(因为答案无法与您联系),您将无法建立有效的TCP连接,因为TCP需要three-way handshake 。因此,您将无法提交您的网络请求。
我想知道这个回应会发生什么?假设客户端位于具有一个外部地址的LAN上,并且发送到该IP的所有流量都由充当DHCP服务器的路由器处理,那么响应是否会回到用户的计算机上?
如果用户的PC具有内部IP地址并使用NAT,则路由器将不知道将数据包转发到哪台LAN机器(因为它没有看到它可以匹配的任何传出请求那个回应)。因此,答案将被删除。
即使,如果,您也可以获得到达客户的响应:
如果确实如此,是否有办法确保用户的浏览器处理它?</ p>
没有。如上所述,TCP请求包括三次握手。此握手尚未完成,因此操作系统只会丢弃数据包。
答案 1 :(得分:2)
CURLOPT_INTERFACE
用于分配了多个IP地址的计算机,以指定应将哪些地址用作连接的源IP。您无法使用它来欺骗某些其他计算机的IP地址。很可能你会得到一个错误,或者该选项将被忽略,操作系统将自动选择一个源接口(默认行为)。
响应将在与请求相同的TCP连接上返回。