Php

有時 ipv4 地址而不是 ipv6 地址

  • October 22, 2020

在我的網站上,它在帶有 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 連接。行為必須是特定於瀏覽器的,並且從一種軟體到另一種軟體的實現會有很大差異。也許這篇文章也可以提供幫助。

引用自:https://serverfault.com/questions/1039741