我们可以用php cURL欺骗$ _SERVER ['REMOTE_ADDR'] /用户ip吗?

时间:2013-08-19 10:44:57

标签: php curl ip ip-address

好吧标题基本上都是这样说的。

但欲了解更多信息。 。

这种方法有效。

$ip = '1.1.1.1';
curl_setopt($handle, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "X_FORWARDED_FOR: $ip"));

它只会在keys数组

上添加这两个$_SERVER
  • HTTP_REMOTE_ADDR
  • HTTP_X_FORWARDED_FOR

密钥REMOTE_ADDR仍然保持不变。

REMOTE_ADDR可以更改吗?答案here表示。但是评论也说然而,它可能不是用户的真实IP地址,因为它可能被代理和其他方法隐藏。这就是为什么一般规则不依赖于$_SERVER['REMOTE_ADDR']的安全功能。

除此之外还有一个curl php方法还可以隐藏/屏蔽/更改ip? (除了上面的代码之外的任何其他php方法都可以。)

有没有办法对抗方法有没有办法获得用户的 ACTUAL REAL IP

干杯!

2 个答案:

答案 0 :(得分:17)

否。 $_SERVER['REMOTE_ADDR']是客户端用于连接到Web服务器的实际物理IP地址,由三方TCP握手确认。没有办法通过设置简单的HTTP标头来伪装它。您也无法使webserver / PHP以任何方式用其他内容覆盖此值。 $_SERVER['REMOTE_ADDR']是根据TCP连接信息设置的。

要实际欺骗IP地址,您必须更深入地了解实际的网络层,并对中间位置/代理中的网络设备/人员进行一定程度的控制/实际上无法从中建立TCP连接一个IP地址,而不是您建立的IP地址。

  

有没有办法对抗方法或有没有办法获得用户的ACTUAL REAL IP?

没有。 “用户的实际IP地址”是您的网络服务器从中获取连接的地址。没有其他地址适合您。客户端从某个IP连接到您的服务器,这通过三方TCP握手确认,这是您知道的该客户端的唯一地址。此客户端可能是代理服务器或NAT路由器(即代理服务器)或其他内容,您根本就不知道,也不会对您产生任何影响。

答案 1 :(得分:0)

如果客户端使用代理服务器后面的浏览器,则$_SERVER['REMOTE_ADDR']将是代理服务器的IP地址。远程地址是进行连接的机器的IP。

如果代理使用标头来指示是否代表其他计算机执行连接,则可以使用这些标头来确定代理后面的浏览器的IP。

  • 其中一些HTTP标头转换为环境变量,例如$_SERVER['HTTP_X_FORWARDED_FOR']$_SERVER['HTTP_X_FORWARDED']$_SERVER['HTTP_FORWARDED_FOR']$_SERVER['HTTP_FORWARDED']
  • 您可以检查服务器是否已定义其中一些变量,并(尝试)确定代理服务器后面的浏览器的IP。

请注意,RFC 6648已弃用X-*标头,而RFC 7239已弃用X-Forwarded-*,方法是定义Forwarded标头。

您可以在

查看一些答案