簡體   English   中英

PHP getenv HTTP_X_FORWARDED_FOR包含字母

[英]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地址。

  1. 我不知道為什么http_x_forwarded_for返回2 ip?

  2. 為什么第一個的http_x_forwarded_for包含字母?

  3. 為什么http_client_ip, http_x_forwarded, http_forwarded_for, http_forwarded為空?

  4. 為什么remote_addrhttp_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM