2009-10-28 24 views
3
IP地址

海傢伙, 如何獲得婉使用PHP我的用戶的IP地址....獲取婉使用PHP

+0

由用戶指您的客戶瀏覽您的網站或網站正在執行的用戶。 – 2009-10-28 18:05:37

回答

1

在典型的LAN設置,在整個局域網通過路由器連接到互聯網,LAN上的每臺計算機將共享一個「外部」WAN IP(分配給路由器),但每臺計算機都有一個「內部」LAN IP(通常爲192.168。)。

在這種情況下,該LAN上任何計算機的所有外部請求都將顯示爲來自相同的WAN IP。單獨的路由器會知道請求屬於局域網上的哪臺計算機,因此您的PHP無法檢測到局域網IP,但只能訪問WAN IP(通過$ _SERVER ['REMOTE_ADDR']元素)

如果請求是內部的(比如對同一LAN上的HTTP服務器說),$ _SERVER ['REMOTE_ADDR']元素將保留提出請求的計算機的LAN IP。

簡而言之,服務器只知道發送請求的設備的IP,不管該IP是屬於LAN,WAN還是任何其他類型的網絡。

2

$ _SERVER ['REMOTE_ADDR']會爲您提供HTTP請求的IP地址。如果您指的是「用戶」作爲瀏覽您的網站的人,那麼這很可能是您要查找的內容。

如果你指的是WAN IP的「執行用戶已經可以使用以下行來獲取服務器的WAN IP

$ WANIP =的file_get_contents(「http://www.whatismyip.com/automation/n09230945.asp」);

請記住,這將使一個DNS和一個HTTP連接到whatismyip.com,這將減慢您的網站。

0

我使用whatismyip.com來得到這個。我不會在生產中使用它,但是我將它用於集成測試(特別是,Paypal IPN不能與本地主機配合使用,並且需要通過WAN IP設置端口轉發)。

(注意它們的使用政策!http://www.whatismyip.com/faq/automation.asp

function getWANIP() { 
    $url = "http://automation.whatismyip.com/n09230945.asp"; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    //UNCOMMENT TO DEBUG TO output.tmp 
    //curl_setopt($ch, CURLOPT_VERBOSE, true); // Display communication with server 
    //$fp = fopen("output.tmp", "w"); 
    //curl_setopt($ch, CURLOPT_STDERR, $fp); // Display communication with server 

    $response = curl_exec($ch); 
    curl_close($ch); 

    if ($response === FALSE) { 
     throw new Exception("Error while retrieving server data: " . curl_error($ch)); 
    } 

    return $response; 
} 
6

我發現最好的辦法是採用了最新的WhatIsMyIPAddress API,http://bot.whatismyipaddress.com和使用建議1個查詢每5分鐘Source。它以明文形式返回WAN IP,因此使用

file_get_contents("http://bot.whatismyipaddress.com"); 

將無需任何後分析即可輕鬆獲得IP。

+0

這將獲得服務器廣域網ip,而不是您的設備/計算機 – JosFabre 2015-10-16 13:58:29