可能重複:
suddenly $_SERVER['REMOTE_ADDR'] is started returning 10.10.10.10 php
我必須在這裏漏掉了一些根本的東西。但是,當我瀏覽到一個IP顯示的網站如http://www.whatsmyip.org/他們表現出一定的IP。但是,當我在我的網站上的頁面上呼出$_SERVER["REMOTE_ADDR"]
時,它會顯示不同的IP。
這是爲什麼?我如何通過PHP獲取與whatsmyip.org網站顯示的IP相同的IP?
可能重複:
suddenly $_SERVER['REMOTE_ADDR'] is started returning 10.10.10.10 php
我必須在這裏漏掉了一些根本的東西。但是,當我瀏覽到一個IP顯示的網站如http://www.whatsmyip.org/他們表現出一定的IP。但是,當我在我的網站上的頁面上呼出$_SERVER["REMOTE_ADDR"]
時,它會顯示不同的IP。
這是爲什麼?我如何通過PHP獲取與whatsmyip.org網站顯示的IP相同的IP?
這可能是因爲你從本地主機訪問它?你看到的IP是127.0.0.1,還是你的本地IP(192.168.x.x)?
當你的網絡服務器在本地機器上時,它會給你本地IP地址127.0.0.1,這是因爲你沒有從外部訪問它。這是理由。
但我的網絡服務器不在我的本地機器上。來自whatsmyip站點的「正確的」IP地址是213.115.255.236,我從我自己迴應的IP地址是194.192.151.254 – Weblurk 2011-05-23 13:43:03
然後可能是在您的局域網中...... – 2011-05-23 13:50:08
什麼是IP?
我唯一能做的就是,你可能會背後的代理。它會是嗎?
「正確「來自whatsmyip站點的IP是213.115.255.236,而我從我自己迴應的IP是194.192.151.254 – Weblurk 2011-05-23 13:42:32
首先讓我澄清幾件事。
當你在本地主機上你不使用你的ISP要獲取一個網頁,因此你會使用內部ip 127.0.0.1
或::1
爲ipv6。
如果你通過某種類型的路由器從在本地網絡上抓取的網頁,你將不得不通過諸如192.168.1.90
如果您的網站外網主辦的路由器分配的IP,然後你問你的ISP爲您提取網站,這意味着您可以使用whatsmyip指定的IP。
如果您使用DNS服務器(如Opendns),那麼您要求您的ISP要求Opendns爲您提取網站,並且打開DNS使用一組與您的ip不同的ip,原因很明顯。
可能存在某種可能會干擾的代理,所以您應該做的就是對此進行反制,標準代理站點應將客戶端IP轉發到服務器,以防止需要進行任何直接連接以及其他幾個原因。
這是說,你通常可以找到通過檢查其他幾個PARAMS的IP您檢查REMOTE_ADDR
之前,這裏是我爲我的項目之一創建一個類,但你可以把你需要的東西:
https://github.com/AdminSpot/ASDDL/blob/master/system/classes/http/request.php
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key)
{
if (array_key_exists($key, $_SERVER) === true)
{
foreach (explode(',', $_SERVER[$key]) as $ip)
{
if (filter_var($ip, FILTER_VALIDATE_IP) !== false)
{
$this->ip = $ip;
break;
}
}
}
}
正如你可以看到排列的順序是非常重要的:
通知REMOTE_ADDR
說到最後,這是因爲這是最後的手段,大部分的時間是不正確。
首先檢查REMOTE_ADDR是否是私人地址可能是合適的;其他值可能在標題中被欺騙。 http://stackoverflow.com/questions/13818064/check-if-an-ip-address-is-private – Mike 2013-05-22 13:36:16
如果你的服務器是Apache和使用Apache之前一些前端,你可以嘗試使用mod_rpaf:
在Debian中:
aptitude install libapache2-mod-rpaf
然後編輯配置:
nano /etc/apache2/mods-enabled/rpaf.conf
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1
</IfModule>
什麼是您的服務器?你看到的是哪個IP?也許127.0.0.1或192.168.0.1或類似的東西。 – 2011-05-23 13:23:19
您的PHP服務器是否在帶有重寫/代理配置的Apache前端後面運行? – 2011-05-23 13:23:25
@OZ_我看到的ip不是127.0.0.1或192.168.0.1,它是一個「普通」IP。 – Weblurk 2011-05-23 13:36:34