[英]PHP getenv HTTP_X_FORWARDED_FOR contain alphabet
$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
嗨,我是ip的新手,不確定如何獲取真實的ip地址。
我不知道為什么http_x_forwarded_for
返回2 ip?
為什么第一個的http_x_forwarded_for
包含字母?
為什么http_client_ip, http_x_forwarded, http_forwarded_for, http_forwarded
為空?
為什么remote_addr
與http_x_forwarded_for
不同?
哪個是正確的IP地址
如果您要處理代理,則只要轉發請求,這些代理就會添加X-Forwarded-For標頭。 例如:
client -> proxy -> proxy -> server
這里涉及到兩個代理,可能一個在客戶端場所,一個在服務器數據中心,或者兩者都在客戶端,或者都在數據中心,或者您遇到的任何其他組合。
然后,您的服務器(PHP)會將遠程IP視為最接近的代理。 那就是它從那里獲得“物理”連接的地方。
是好的兩個代理服務器添加他們來自於HTTP頭得到請求的地址。 “字母”地址是IPv6地址 。
僅當您知道由誰設置標題時,才應該信任這些標題中的任何一個。 唯一保證的經過驗證的地址是REMOTE_ADDR
,因為這是實際的連接。 其他的僅僅是任何人都可以設置的HTTP標頭,包括客戶端本身。 除非您知道您的數據中心有一個代理,並且知道它確切設置了什么標頭,否則您應該忽略它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.