首頁  >  文章  >  後端開發  >  如何辨識代理伺服器背後的真實IP位址?

如何辨識代理伺服器背後的真實IP位址?

Patricia Arquette
Patricia Arquette原創
2024-11-05 03:18:02339瀏覽

How to Identify the True IP Address Behind Proxy Servers?

識別代理伺服器背後的真實IP 位址

使用標準PHP 方法(例如$_SERVER['REMOTE_ADDR'] 來擷取訪客的地址)如果訪客透過代理伺服器造訪您的網站,則可能無法提供準確的資訊。

要解決此問題,請考慮使用以下 PHP 程式碼:

<code class="php">function getUserIP()
{
    // Obtain the IP address of the visitor behind CloudFlare
    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
        $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
        $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
    }
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    $ip = null;

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}

$user_ip = getUserIP();

echo $user_ip; // Output IP address [Ex: 177.87.193.134]</code>

此函數首先檢查是否訪客正在使用 CloudFlare,這是一種流行的代理服務。如果是,它會使用 HTTP_CF_CONNECTING_IP 標頭檢索真實 IP 位址。

接下來,它會考慮三個潛在的 IP 來源:HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR。它會驗證每個 IP 位址並選擇最可靠的一個。

透過採用這種方法,您可以有效地取得訪客的實際 IP 位址,即使他們位於代理伺服器後面。

以上是如何辨識代理伺服器背後的真實IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn