[英]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.