使用php获取wan ip地址

时间:2009-10-28 11:33:28

标签: php

Hai Guys,           如何使用PHP获取我的用户的万能地址....

4 个答案:

答案 0 :(得分:6)

我发现最好的选择是使用最新的WhatIsMyIPAddress API,http://bot.whatismyipaddress.com,建议每5分钟使用一次查询[Source]。它以纯文本形式返回WAN IP,因此使用

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

将轻松获取IP,无需任何后期解析。

答案 1 :(得分:2)

$ _ SERVER ['REMOTE_ADDR']将为您提供发出HTTP请求的IP。如果您将“用户”称为浏览您网站的人,那么这很可能就是您所寻找的。

如果您指的是“执行用户”所拥有的WAN IP,您可以使用以下行获取服务器的WAN IP

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

请记住,这会使与ahismyip.com建立DNS和HTTP连接,从而减慢您的网站速度。

答案 2 :(得分:1)

在典型的局域网设置中,整个局域网通过路由器连接到互联网,局域网中的每台计算机都将共享一个“外部”WAN IP(分配给路由器),但每个计算机都有一个“内部”,LAN IP(通常为192.168。)。

在这种情况下,该LAN上任何计算机的所有外部请求似乎都来自同一WAN IP。单独的路由器会知道请求所属的LAN上的哪台计算机,因此您的PHP无法检测到LAN IP,只能检测WAN IP(通过$ _SERVER ['REMOTE_ADDR']元素)< / p>

如果请求是内部的(比如说同一局域网上的HTTP服务器),$ _SERVER ['REMOTE_ADDR']元素将保留发出请求的计算机的LAN IP。

简而言之,服务器只知道发送请求的设备的IP,无论该IP是属于LAN,WAN还是任何其他类型的网络。

答案 3 :(得分:0)

我使用whatismyip.com来获取此信息。我不会在生产中使用它,但我将它用于集成测试(特别是,Paypal IPN不能与localhost一起使用,并且需要通过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;
}