2013-02-23 144 views
1

我知道問題,但沒有在stackoverflow上找到真正的答案。這不是X_FORWARDED_FOR,SERVER_NAMESERVER_REMOTE_ADDR,我想要獲得連接到我的服務器的遠程客戶端的本地IP地址,以檢測本地遠程網絡上真正連接的是誰。PHP |從客戶端用戶獲取私有IP地址?

解釋這一點:

ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC 

我想知道什麼?連接的遠程客戶端$_SERVER["REMOTE_ADDR"]

  1. 公共IP地址還行,但是!...公共網絡上連接的客戶端的
  2. 本地IP地址(192.168.xx的,10.xxx,172.xxx)

如何解決這個問題?我有回答,所以我想這應該是大家知道的,如果想知道本地IP地址:

您應該使用CURLcurl_getinfo()函數。然後,指向URL地址,你希望(你的主服務器的IP或其他)任何人,例如:

<?php 
    $ch = curl_init(); 

    $opt = curl_setopt($ch, CURLOPT_URL, "YOUR_SOME_URL_ADDRESS"); 

    curl_exec($ch); 

    $response = curl_getinfo($ch); 

    $result = array('client_public_address' => $response["primary_ip"], 
        'client_local_address' => $response["local_ip"] 
      ); 

    var_dump($result); 

    curl_close($ch); 

?> 

關注$response["primary_ip"]其響應您的公共地址和$response["local_ip"]其反應變量本地地址。現在,這是例子:

ISP <----> ROUTER <----> LOCAL NETWORK <----> LOCAL PC 
/\            /\ 
||            || 
\/            \/ 
$response["primary_ip"]     <----> $response["local_ip"] 
213.x.x.x (for example)      192.168.1.3 (for example) 

結果:

array (size=2) 
    'client_public_address' => string '213.xxx.xxx.xxx' (length=14) 
    'client_local_address' => string '192.168.1.3' (length=11) 

這會不會給人一種真正的本地IP地址!

謝謝。

+1

爲什麼你需要本地IP地址?在PHP中有會話cookie和其他方式來唯一標識用戶的想法。 – marekful 2013-02-23 19:16:12

+1

**但這是如何讓你的服務器本地IP **不是客戶端...使用任何代理進入你的網站,所以你會看到你完全錯誤 – Peter 2013-02-23 19:17:31

+0

想想!你想找到一個真正的人在連接的房子?你不知道在家裏是否有太多擁有不同user_agent和端口的人?你的答案是抓住他們的本地IP地址,並要求得到哪個主機名在家中連接? – 2013-02-23 19:17:52

回答

1

這永遠不會起作用。
首先,您需要客戶端上的HTTP服務器來響應CURL。
即使它會 - 它不保證返回任何「本地IP」。 接下來,一個HTTP服務器,它的客戶回來看起來可疑,最有可能被禁止。

無論如何,我試圖在遠程IP代碼:

array(2) { 
    ["client_public_address"]=> 
    string(7) "8.8.8.8" 
    ["client_local_address"]=> 
    string(0) "" 
} 

它時,我想我的本地路由器它的作品沒關係

array(2) { 
    ["client_public_address"]=> 
    string(13) "XXX" 
    ["client_local_address"]=> 
    string(12) "192.168.1.37" 
} 

它僅適用於返回任何

雖然您的擁有本地路由器,但它無法從遠程系統獲取任何本地地址。
坦率地說,它只顯示分配給您PC的本地IP地址。

+0

是的。你是對的。我已經在VPS服務器上測試過了,它會返回NULL值。我的錯誤,對不起。 – 2013-02-23 19:31:43

1

默認情況下,本地IP尋址不會暴露給應用層。您需要能夠從網絡數據包中提取此信息的較低級別的工具。

0

您可以使用HTML5功能(CORS和WebSocket)來確定範圍(xxx.xxx.xxx。XXX/24)看到這樣活生生的例子:

JS-RECON

如何開展工作? 您可以掃描IP地址範圍(192.168.1.0/24,192.168.0.1/24等)並查找用戶使用的範圍,但是找到確切的IP地址仍然很困難。

結果: 不起作用。 IP是192.168.1.200返回192.168.1.2;網站無效,工具並不真正起作用。

+0

經過測試。沒有給出正確的結果。它響應192.168.x.x,而不是10.1.x.x – 2013-02-23 19:49:07

+0

你點擊了「發現我的私人IP地址?」,無論如何,它是唯一可用的工具。 – 2013-02-23 19:53:18

+0

是的。我點擊'Discoer我的私人IP地址'並掃描IP地址192.168.0.x ......並自動增加。 – 2013-02-23 19:54:02

-2
function getRealIpAddr(){ 
     //check ip from share internet 
     if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
      $ip=$_SERVER['HTTP_CLIENT_IP']; 
     } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
     //to check ip is pass from proxy 
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
     } else { 
      $ip=$_SERVER['REMOTE_ADDR']; 
     } 

     return $ip; 
    } 
+0

這不用於獲取本地IP地址。 – 2013-07-31 12:05:09