簡體   English   中英

我需要IP地址

[英]I need get the IP address

我需要使用PHP通過代理獲得用戶的IP地址...有什么建議嗎?

通常,代理會添加特定的標頭X-Forwarded-For ,您可以通過服務器變量$_SERVER['HTTP_X_FORWARDED_FOR']來檢入PHP。

這是一件很難的事,並非所有代理都能提供用戶的真實IP。 我寫了這個函數,但是在此之前試圖找到用戶最可能的IP:

function get_ip_address() {

    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_CLIENT_IP']))
        return $_SERVER['HTTP_CLIENT_IP'];
    elseif (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_COMING_FROM']))
        return $_SERVER['HTTP_COMING_FROM'];
    elseif (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_X_COMING_FROM']))
        return $_SERVER['HTTP_X_COMING_FROM'];
    elseif (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_FORWARDED']))
        return $_SERVER['HTTP_FORWARDED'];
    elseif (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_X_FORWARDED']))
        return $_SERVER['HTTP_X_FORWARDED'];
    elseif (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_FORWARDED_FOR']))
        return $_SERVER['HTTP_FORWARDED_FOR'];
    elseif (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_X_FORWARDED_FOR']))
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    else return $_SERVER['REMOTE_ADDR'];

}

如果您只是將IP存儲在數據庫中,則該函數僅返回1個IP,但是我有一個類似的函數,該函數將基於文本的響應與找到的所有可能的IP一起提供。

function get_txt_ip_address() {

    $return = '';

    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_CLIENT_IP']))
        $return .= $_SERVER['HTTP_CLIENT_IP']." (client) / ";
    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_COMING_FROM']))
        $return .= $_SERVER['HTTP_COMING_FROM']." (cf) / ";
    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_X_COMING_FROM']))
        $return .= $_SERVER['HTTP_X_COMING_FROM']." (xcf) / ";
    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_FORWARDED']))
        $return .= $_SERVER['HTTP_FORWARDED']." (fw) / ";
    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_X_FORWARDED']))
        $return .= $_SERVER['HTTP_X_FORWARDED']." (xfw) / ";
    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_FORWARDED_FOR']))
        $return .= $_SERVER['HTTP_FORWARDED_FOR']." (fwf) / ";
    if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})",$_SERVER['HTTP_X_FORWARDED_FOR']))
        $return .= $_SERVER['HTTP_X_FORWARDED_FOR']." (xfwf) / ";

    $return .= $_SERVER['REMOTE_ADDR']." (ra) / ";
    $return .= gethostbyaddr($_SERVER['REMOTE_ADDR']);

    return $return;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM