客户端机器/浏览器如何处理未经请求的HTTP响应?

时间:2010-01-17 22:49:16

标签: http tcp

想象一下:

  • 用户转到脚本(http://sample.org/test.php),

  • 脚本向其他页面(http://google.com/)发送HTTP请求。对于此示例,我们将使用curl

  • 该脚本通过CURLOPT_INTERFACE将请求的IP地址设置为用户的IP。

我已经知道请求脚本不会收到响应,因为远程主机会向请求中给出的IP地址发送任何响应。

我想知道这个回应会发生什么?假设客户端位于具有一个外部地址的LAN上,并且发送到该IP的所有流量都由充当DHCP服务器的路由器处理,响应是否会回复到用户的计算机?如果确实如此,是否有任何方法可以确保用户的浏览器处理它?如果是这样,浏览器将如何处理这个问题?它会打开谷歌的新窗口吗?

我肯定会对这个问题采取后续行动,但在我进一步实验之前,我非常好奇这个级别的情况。

2 个答案:

答案 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连接上返回。