隨著互聯網的不斷發展,網路安全問題也越來越重要。獲取客戶端真實IP地址,是很多網路安全相關的技術中必不可少的一項。在PHP編程中,我們可以通過多種方式獲取客戶端真實IP地址,本文就來介紹一下其中幾種常用的方法。
一、從HTTP HEADER中獲取客戶端IP地址
HTTP HEADER 中包含了客戶端請求的一些關於身份的信息,其中也包含了客戶端的IP地址。我們可以通過 $_SERVER 變數中的 HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR 來獲取這些信息。
HTTP_X_FORWARDED_FOR 是經過代理伺服器轉發後的客戶端IP地址,如果有多個IP地址,每個地址之間用逗號隔開;而REMOTE_ADDR 則是最後一個代理伺服器的地址。
下面是有關獲取客戶端IP地址代碼示例:
function getClientIp() { $ipaddress = ''; if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) { $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; } else if(isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP']) { $ipaddress = $_SERVER['HTTP_CLIENT_IP']; } else if(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']) { $ipaddress = $_SERVER['REMOTE_ADDR']; } return $ipaddress; }
二、通過HTTP Client 獲取客戶端IP地址
PHP中的$_SERVER變數提供了HTTP_CLIENT_IP。 這是一個可選的頭文件,包含客戶端使用的網路地址。
三、通過 HTTPX-Forwarded-For 獲取IP地址
HTTPX-Forwarded-For是代理伺服器通過所述協議傳遞的原始連接的真實IP地址。 代理伺服器通常添加一個「X-Forwarded-For」欄位,以表明原始請求發起客戶端的IP地址。 由於隱藏真實客戶端地址以及更改客戶端請求的代理伺服器數量將在HTTP_X_FORWARDED_FOR欄位中添加代理伺服器IP地址。
下面是代碼示例:
function getClientIP() { $ip_address = ''; if(getenv('HTTP_CLIENT_IP')) $ip_address = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ip_address = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ip_address = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ip_address = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ip_address = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ip_address = getenv('REMOTE_ADDR'); else $ip_address = 'UNKNOWN'; return $ip_address; }
四、通過使用 REMOTE_ADDR 獲取IP地址
REMOTE_ADDR 表示客戶端已連接到伺服器上的 IP 地址。 下面是代碼示例:
function getIp() { $ip_address = ''; if(!empty($_SERVER['REMOTE_ADDR'])){ $ip_address = $_SERVER['REMOTE_ADDR']; } return $ip_address; }
五、使用外部庫獲取IP地址
如果您不想編寫自己的代碼來獲取 IP 地址,那麼還可以使用許多外部庫。例如,如果您使用的是Laravel框架,那麼可以使用 Laravel Request::ip() 函數來獲取 IP 地址。下面是示例代碼:
function getIp() { return Request::ip(); }
六、通過使用 HTTP_REFERER 獲取IP地址
HTTP_REFERER是指向當前請求頁面的頁面的地址。它可以通過解析伺服器上的HTTP_REFERRER來獲取客戶端IP地址。下面是代碼示例:
function getIP() { $ipAdd = ''; if (isset($_SERVER['HTTP_REFERER'])){ $urlParts = parse_url($_SERVER['HTTP_REFERER']); $ipAdd = gethostbyname($urlParts['host']); } return $ipAdd; }
七、通過使用 GeoIP 包獲取IP地址
使用GeoIP包是另一種獲取客戶端IP地址的方法,它可能需要額外的設置或者安裝,但是它可以根據您的 IP 地址提供更詳細的信息,比如您所在的城市,州和國家等信息。下面是代碼示例:
$gi = geoip_open($giDatabasePath, GEOIP_STANDARD); $ip_address = $_SERVER['REMOTE_ADDR']; $rsGeoData = geoip_record_by_addr($gi, $ip_address); if ($rsGeoData) { echo "Country Name: ".$rsGeoData->country_name . "
"; echo "Country Code: ".$rsGeoData->country_code . "
"; echo "Region: ".$rsGeoData->region . "
"; echo "City: ".$rsGeoData->city . "
"; echo "latitude: ".$rsGeoData->latitude . "
"; echo "Longitude: ".$rsGeoData->longitude . "
"; }
八、總結
本文介紹了幾種在 PHP 中獲取客戶端 IP 地址的方法,包括從 HTTP HEADER 中獲取客戶端 IP 地址、HTTP CLIENT 獲取客戶端 IP 地址、HTTPX-Forwarded-For 獲取 IP 地址、通過使用 REMOTE_ADDR 獲取 IP 地址、使用外部庫獲取 IP 地址、通過使用 HTTP_REFERER 獲取 IP 地址以及通過使用 GeoIP 包獲取 IP 地址。每種獲取方法都有其自身的優點和缺點,開發者可以根據自身需要來進行選擇。
原創文章,作者:AHZW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149717.html