好吧标题基本上都是这样说的。
但欲了解更多信息。 。
这种方法有效。
$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 ?
干杯!
答案 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。
$_SERVER['HTTP_X_FORWARDED_FOR']
,$_SERVER['HTTP_X_FORWARDED']
,$_SERVER['HTTP_FORWARDED_FOR']
和$_SERVER['HTTP_FORWARDED']
请注意,RFC 6648已弃用X-*
标头,而RFC 7239已弃用X-Forwarded-*
,方法是定义Forwarded
标头。
您可以在
查看一些答案