2012-10-03 221 views
2

我正在調解從客戶端A到服務器B的請求。客戶端A可能是手機或筆記本電腦。服務器B想要知道客戶端A的IP地址,但他們正在尋找$_SERVER['REMOTE_ADDR']。因爲我打到服務器B,他們得到$_SERVER['REMOTE_ADDR']的「錯誤」值 - 他們正在獲取我的服務器的IP地址。我可以做些什麼來讓服務器B在他們的端點上訪問$_SERVER['REMOTE_ADDR']時看到客戶端的IP地址?

回答

5

這發生在一個無法被PHP腳本覆蓋的圖層上。 X-Forwarded-For標頭存在用於中繼真正的客戶端IP,但遠程服務器必須支持這個容易被欺騙的值。

$header = "X-Forwarded-For: {$_SERVER['REMOTE_ADDR']}, {$_SERVER['SERVER_ADDR']}"; 
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array($header)); 
+0

+1打我吧:) - 此外,請參閱此處瞭解服務器B如何檢測客戶端A的IP(注意REMOTE_ADDR是您查看的最後一個地方) - http://stackoverflow.com/questions/1634782/what - 是最準確的方式檢索一個用戶正確的ip地址在php – deizel

0

編輯:之前的答案是完美的。這僅適用於您自己的dev-ip干擾客戶端統計信息的情況。

在沒有更多的信息,在最基本的層面上,你應該刪除自己的「開發者的IP」,所以,你沒有任何統計數據/數據/日誌包括...

你的IP可能與所討論的服務器不同:

<?php 

$dev_ip = '217.12.14.14' // your dev IP address 

if ($_SERVER['REMOTE_ADDR'] == $dev_ip){ 
    // do nothing 
} else { 
    // do|show|log something 
} 

這不考慮動態IP地址分配(而不是靜態IP)。動態IP通常由ISP分配,這是導致更多問題的原因。

+2

我認爲你誤解了這個問題。 – deceze

+0

啊......所以我們正在談論IP到客戶端的轉換並作爲一個網關! (對不起,評論+1!) – nickhar

+0

Upvote to other answer - 完全正確地使用X-forwarded-for,-1給我誤解最初的問題。我錯過了網關元素:) – nickhar

相關問題