1.REMOTE_ADDR:瀏覽當前頁面的用戶計算機的ip地址 2.HTTP_X_FORWARDED_FOR:瀏覽當前頁面的用戶計算機的網關 3.HTTP_CLIENT_IP:客戶端的ip
在PHP 中使用 $_SERVER["REMOTE_ADDR"] 來取得客戶端的 IP 地址,但如果客戶端是使用代理服務器來訪問,那取到的就是代理服務器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務器取得客戶端的真實 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取.
不過要注意的事,并不是每個代理服務器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理服務器的 IP.
還有一點需要注意的是:如果客戶端沒有通過代理服務器來訪問,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值將是空的,因此,如果要在程序中使用此方法,可以這樣處理,代碼如下:
- <?php
- if ($_SERVER["HTTP_X_FORWARDED_FOR"]==”")
- {
- $user_ip=$_SERVER["REMOTE_ADDR"];
- }
- else
- $user_ip=$_SERVER["HTTP_X_FORWARDED_FOR"];
- //開源代碼Vevb.com
- ?>
即:如果客戶端通過代理服務器,則取 HTTP_X_FORWARDED_FOR 的值,如果沒通過代理服務器,就取 REMOTE_ADDR 的值.
獲得客戶端真實的IP地址,代碼如下:
- function GetIP(){
- if (getenv(“HTTP_CLIENT_IP”) && strcasecmp(getenv(“HTTP_CLIENT_IP”), “unknown”))
- $ip = getenv(“HTTP_CLIENT_IP”);
- else if (getenv(“HTTP_X_FORWARDED_FOR”) && strcasecmp(getenv(“HTTP_X_FORWARDED_FOR”), “unknown”))
- $ip = getenv(“HTTP_X_FORWARDED_FOR”);
- else if (getenv(“REMOTE_ADDR”) && strcasecmp(getenv(“REMOTE_ADDR”), “unknown”))
- $ip = getenv(“REMOTE_ADDR”);
- else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], “unknown”))
- $ip = $_SERVER['REMOTE_ADDR'];
- else
- $ip = “unknown”;
- return($ip);
- }
獲取用戶IP地址的三個屬性的區別 (HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
一、沒有使用代理服務器的情況:
REMOTE_ADDR = 您的 IP,HTTP_VIA = 沒數值或不顯示,HTTP_X_FORWARDED_FOR = 沒數值或不顯示
二、使用透明代理服務器的情況:Transparent Proxies
REMOTE_ADDR = 最后一個代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 您的真實 IP,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215.
這類代理服務器還是將您的信息轉發給您的訪問對象,無法達到隱藏真實身份的目的.
三、使用普通匿名代理服務器的情況:Anonymous Proxies
REMOTE_ADDR = 最后一個代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 代理服務器 IP,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215.
隱藏了您的真實IP,但是向訪問對象透露了您是使用代理服務器訪問他們的.
四、使用欺騙性代理服務器的情況:Distorting Proxies
REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 隨機的 IP,經過多個代理服務器時,這個值類似如下:203.98.182.163,203.98.182.163,203.129.72.215.
告訴了訪問對象您使用了代理服務器,但編造了一個虛假的隨機IP代替您的真實IP欺騙它.
五、使用高匿名代理服務器的情況:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 沒數值或不顯示
HTTP_X_FORWARDED_FOR = 沒數值或不顯示,經過多個代理服務器時,這個值類似如下:203.98.182.163,203.98.182.163,203.129.72.215.
完全用代理服務器的信息替代了您的所有信息,就象您就是完全使用那臺代理服務器直接訪問對象,代碼如下:
- <?php
- if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
- {
- $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
- }
- elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
- {
- $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
- }
- elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
- {
- $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
- }
- elseif (getenv("HTTP_X_FORWARDED_FOR"))
- {
- $ip = getenv("HTTP_X_FORWARDED_FOR");
- }
- elseif (getenv("HTTP_CLIENT_IP"))
- {
- $ip = getenv("HTTP_CLIENT_IP");
- }
- elseif (getenv("REMOTE_ADDR"))
- {
- $ip = getenv("REMOTE_ADDR");
- }
- else
- {
- $ip = "Unknown";
- }
- echo "你的IP:".$ip ;
- ?>
新聞熱點
疑難解答