PHP getenv HTTP_X_转发_以包含字母表
嗨,我是ip新手,不知道如何获得真正的ip地址PHP getenv HTTP_X_转发_以包含字母表,php,ip,Php,Ip,嗨,我是ip新手,不知道如何获得真正的ip地址 我不知道为什么http\u x\u转发return2ip 为什么第一个包含字母表的http\u x\u 为什么http\u client\u ip、http\u x\u forwarded、http\u forwarded、http\u forwarded为空 为什么remote\u addr不同于http\u x\u forwarded\u for 哪一个是正确的ip地址如果您处理的是代理,那么每当您转发请求时,这些代理可能会添加X-Forwar
http\u x\u
http\u client\u ip、http\u x\u forwarded、http\u forwarded、http\u forwarded
为空remote\u addr
不同于http\u x\u forwarded\u for
哪一个是正确的ip地址如果您处理的是代理,那么每当您转发请求时,这些代理可能会添加X-Forwarded-For头。例如:
$ipaddress = '';
if ( getenv('HTTP_CLIENT_IP') ) {
$ipaddress = getenv('HTTP_CLIENT_IP');
} else if( getenv('HTTP_X_FORWARDED_FOR') ) {
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
$ipaddress = explode(",", $ipaddress);
$ipaddress = $ipaddress[0];
} else if( getenv('HTTP_X_FORWARDED') ) {
$ipaddress = getenv('HTTP_X_FORWARDED');
} else if( getenv('HTTP_FORWARDED_FOR') ) {
$ipaddress = getenv('HTTP_FORWARDED_FOR');
} else if( getenv('HTTP_FORWARDED') ) {
$ipaddress = getenv('HTTP_FORWARDED');
} else if( getenv('REMOTE_ADDR') ) {
$ipaddress = getenv('REMOTE_ADDR');
} else {
$ipaddress = 'UNKNOWN';
}
return ip2long($ipaddress);
http_client_ip - null
http_x_forwarded_for - 2604:2000:6147:df00:25ee:04a4:ea44:6947, 162.158.62.236
http_x_forwarded - null
http_forwarded_for - null
http_forwarded - null
remote_addr 112.121.183.210
这里涉及两个代理,一个在客户端,一个在服务器的数据中心,或者两者都在客户端,或者两者都在数据中心,或者您遇到的任何其他组合
然后,服务器(PHP)将远程IP视为最接近的代理。这就是它获得“物理”连接的地方
为了方便起见,两个代理都将从中获取请求的地址添加到HTTP头中。“字母”地址是一个字母
如果您知道是谁设置了这些标题,则应该只信任其中任何一个标题。唯一保证的经验证地址是
远程地址
,因为这是实际连接。其他的只是HTTP头,任何人都可以设置,包括客户端本身。除非您知道您的数据中心有一个代理,并且您知道它确切设置了什么标题,否则您应该忽略它们。我的服务器顺便使用了cdn,然后它就是cdn的代理。因此,我应该只使用remote_addr?这将始终是cdn的代理,这不是很有用。调查您的CDN设置的确切标头,并验证您是否可以依赖它;然后你也可以使用这些信息。我尝试远程添加&它们是不同的,其中一个显示HTTP\u X\u转发
client -> proxy -> proxy -> server