2015-10-19 107 views
1

我正在配置一個服務器是雙棧,允許ipv4和ipv6。然後,我想創建一個php頁面來顯示客戶端機器是通過ipv4,ipv6還是兩者連接。PHP函數顯示ipv4 ipv6

我已經試過$ _SERVER ['REMOTE_ADDR']和getenvbyhost(「REMOTE_ADDR」),但它只返回一個或另一個都不會。

我也試過下面的代碼

function isIPv6($ip) { 

    if(filter_var($ip, FILTER_VALIDATE_IP)) { 

    if(filter_var($ip, FILTER_FLAG_IPV6)) { 
     //It is IPv6 indeed. 
    } else { 
     //It is IPv4 
    } 

    } else { 
    // Not a valid IP 
    } 
} 

是否有可能從服務器獲取兩個IPS?

+0

我覺得你的網卡與ipv4或ipv6「說話」,但不能同時發出同樣的請求。 – ChoiZ

回答

4

每個傳入請求使用IPv4或IPv6,但不能同時使用兩者。如果你想知道兩者,那麼你將需要使用不同的協議觸發到服務器的多個連接。

執行此操作的最常見方法是創建兩個額外的主機名:一個僅包含服務器的IPv4地址,另一個僅包含服務器的IPv6地址。然後,爲了您的回覆(假設HTML),您生成一個唯一的代碼,並在頁面中包含兩個隱藏的圖像。一種使用純IPv4主機名,另一種使用純IPv6主機名。兩者都包含您在URL中生成的唯一代碼,因此客戶端不會緩存圖像,並且您可以看到哪些圖像請求屬於一起。

這是一個相當麻煩,併爲大多數目的不值得的努力。