我们可以用php cURL欺骗$服务器[';远程地址';]/用户ip吗?

我们可以用php cURL欺骗$服务器[';远程地址';]/用户ip吗?,php,curl,ip,ip-address,Php,Curl,Ip,Ip Address,标题基本上就是这么说的 但更多信息 这种方法有效,但 $ip = '1.1.1.1'; curl_setopt($handle, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "X_FORWARDED_FOR: $ip")); 它仅将这两个键添加到$\u服务器阵列上 HTTP\u REMOTE\u ADDR HTTP\u X\u转发 键REMOTE\u ADDR仍保持不变 可以更改远程地址吗?答案是否定的。但是一条评论也说,它可能不是用户的真实

标题基本上就是这么说的

但更多信息

这种方法有效,但

$ip = '1.1.1.1';
curl_setopt($handle, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "X_FORWARDED_FOR: $ip"));
它仅将这两个
键添加到
$\u服务器
阵列上

  • HTTP\u REMOTE\u ADDR
  • HTTP\u X\u转发
REMOTE\u ADDR
仍保持不变

可以更改远程地址吗?答案是否定的。但是一条评论也说,它可能不是用户的真实IP地址,因为它可能被代理和其他方法隐藏。这就是为什么一般规则不依赖
$\u SERVER['REMOTE\u ADDR']
来实现安全功能的原因

抛开这些不谈,有没有一个curl-php方法也可以隐藏/屏蔽/更改ip?(除了上述代码之外的任何其他php方法都可以。)

有没有办法对抗方法有没有办法获得用户的实际IP


干杯

否。
$\u SERVER['REMOTE\u ADDR']
是客户端用于连接到Web服务器的实际物理IP地址,由三方TCP握手确认。没有办法通过设置简单的HTTP头来伪装这一点。您也不能让webserver/PHP以任何方式用其他内容覆盖此值<代码>$\u服务器['REMOTE\u ADDR']
根据TCP连接信息设置,句点

<> P>实际上要欺骗IP地址,你必须深入到实际的网络层中,并且对中间设备/代理/网络中的网络设备/人有某种程度的控制,实际上不能从IP地址建立一个TCP连接,而不是从一个IP地址建立TCP连接。 有没有办法对抗这种方法,或者有没有办法获得用户的实际IP


否。“用户的实际IP地址”是您的Web服务器从中接收连接的地址,句号。没有其他地址给你。客户端通过特定的IP连接到您的服务器,这通过三方TCP握手得到确认,这是您知道的该客户端的唯一地址。此客户端可能是代理或NAT路由器(即代理)或其他,您根本不知道,也不应该对您造成任何影响。

如果客户端在代理后使用浏览器,则
$\u服务器['REMOTE\u ADDR']
将是代理的IP地址。远程地址是进行连接的计算机的IP

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

  • 其中一些HTTP头被转换为环境变量,例如
    $\u服务器['HTTP\u X\u转发给']
    $\u服务器['HTTP\u X\u转发']
    $\u服务器['HTTP\u转发给']
    $\u服务器['HTTP\u转发']
  • 您可以检查这些变量中的一些是否已由服务器定义,并(尝试)确定代理后面浏览器的IP
请注意,已弃用的
X-*
标题和弃用的
X-Forwarded-*
通过定义
Forwarded
标题

你可以在


如果您连接到的网站检查了
HTTP\u X\u FORWARDED\u,并假定这是
REMOTE\u ADDR
上的正确IP,则您已成功伪造了它。然而,这取决于网站的编程方式。如果我不相信你的答案,我觉得这是错误的。非常感谢。