Php
有時 ipv4 地址而不是 ipv6 地址
在我的網站上,它在帶有 aaa 記錄的 debian 伺服器上與 apache2 一起執行,我用 php 檢查使用者是否使用 IPv6。為此,我使用以下程式碼 Shippet 獲取使用者的 IP 地址:
if (isset($_SERVER['HTTP_CLIENT_IP'])){ $ip = $_SERVER['HTTP_CLIENT_IP']; }else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }else if(isset($_SERVER['HTTP_X_FORWARDED'])){ $ip = $_SERVER['HTTP_X_FORWARDED']; }else if(isset($_SERVER['HTTP_FORWARDED_FOR'])){ $ip = $_SERVER['HTTP_FORWARDED_FOR']; }else if(isset($_SERVER['HTTP_FORWARDED'])){ $ip = $_SERVER['HTTP_FORWARDED']; }else if(isset($_SERVER['REMOTE_ADDR'])){ $ip = $_SERVER['REMOTE_ADDR']; }else{ echo "ERROR"; }
這一切都很好。但有時即使我有 IPv6 連接,我也會得到 IPv4 地址。這不可能是我的網際網路連接錯誤,因為當訪問一個 ip 檢查網站(比如這個)時,它會顯示一個 ipv6 地址。我也可以用
ping -6 server_ip
. 所以我的 aaa-record 或者 apache2 或者 php 肯定有問題。我希望有一個人可以幫助我。
沒有什麼不妥。由於您的網站同時解析為 IPv4 和 IPv6 地址,因此另一端的瀏覽器(或任何 HTTP 客戶端)可能會以隨機順序選擇地址,或者更喜歡 IPv6 而不是 IPv4(或相反)。有時它很可能通過 IPv4 連接,有時通過 IPv6 連接。行為必須是特定於瀏覽器的,並且從一種軟體到另一種軟體的實現會有很大差異。也許這篇文章也可以提供幫助。