2011-03-18 67 views
7

我們如何使用PHP跟蹤代理背後的真實IP地址?我的意思是一個純粹的PHP實現。因爲他們可以關閉瀏覽器的js.BTW當JS是打開我可能會使用HTML 5地理位置,所以我不需要IP地址來定位用戶。如何跟蹤代理後面的真實IP地址

回答

1

位於代理後面的用戶沒有可全局路由的IP地址。如果你想保持會話狀態,你最好擁有一個你生成的會話密鑰,並將其設置爲一個cookie,或者保存在URL中(這種方法有權衡)。

如果你真的想知道他們的IP地址是在自己的網絡上,你可以在頁面中使用javascript來找出它,然後將它發送回你的服務器。

12

如果發送了一個HTTP標頭,您可以查看X-Forwarded-For HTTP標頭,但沒有可靠的方法知道。

+5

而且要說得很清楚:**除非**所有**請求都通過代理服務器** **您**控制並且沒有任何請求可以直接到達您的服務器,通過代理或該標題被以某種方式剝離。有這麼多的PHP應用程序,只需使用無線上網的IP,如果它可用... – ThiefMaster 2012-09-22 02:22:55

8

此PHP代碼可以工作,對於正向和反向代理很有用。對於反向代理,請注意,X_FORWARDED_FOR頭信息(如果可用)可以僞造,並且不應該被信任。

if($_SERVER["HTTP_X_FORWARDED_FOR"] != ""){ 
    $IP = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
    $proxy = $_SERVER["REMOTE_ADDR"]; 
    $host = @gethostbyaddr($_SERVER["HTTP_X_FORWARDED_FOR"]); 
}else{ 
    $IP = $_SERVER["REMOTE_ADDR"]; 
    $proxy = "No proxy detected"; 
    $host = @gethostbyaddr($_SERVER["REMOTE_ADDR"]); 
} 
+0

請我想知道爲什麼我downvoted。謝謝。 – Cogicero 2011-03-18 09:53:54

+2

這是因爲變量名稱。 $ IP應該被命名爲'$ an_HTTP_header_that_may_looks_like_an_IP_address_possibly_faked' – 2011-03-18 10:02:37

+1

哈哈,你很有趣,上校:)我已經在我的解釋中說明了警告。無論哪種方式,它仍然是收到的IP的方式:僞造或不!儘管我喜歡你的幽默感。 – Cogicero 2011-03-18 10:30:07