使用PHP获取WAN IP地址

3

大家好, 如何使用PHP获取我的用户的广域网IP地址....


你所说的用户是指浏览您网站的客户端,还是指网站正在执行的用户? - Ben Reisner
4个回答

6
我发现最好的选择是使用最新的WhatIsMyIPAddress API,http://bot.whatismyipaddress.com,建议每5分钟只查询1次[源代码]。它以纯文本形式返回WAN IP,因此可以使用。
file_get_contents("http://bot.whatismyipaddress.com"); 

将很容易地获取IP,无需进行任何后处理。


这将获取服务器的WAN IP,而不是您的设备/计算机。 - Jos

2

$_SERVER['REMOTE_ADDR']可以给你HTTP请求所在的IP地址。如果你说的“用户”是指浏览你的网站的人,那么这很可能就是你要找的。

如果你想要获取“执行用户”的WAN IP,你可以使用以下代码行来获取你的服务器的WAN IP:

$wanIP=file_get_contents("http://www.whatismyip.com/automation/n09230945.asp");

请注意,这将会向whatismyip.com进行DNS和HTTP连接,这将会拖慢你的网站。


1
在典型的局域网设置中,整个局域网通过路由器连接到互联网,局域网上的每台计算机都共享一个“外部”的WAN IP(分配给路由器),但它们各自都有一个“内部”的LAN IP(通常为192.168.)。
在这种情况下,该局域网上任何计算机发出的所有外部请求都将显示为来自同一WAN IP。只有路由器知道请求属于局域网上的哪台计算机,因此您的PHP无法检测到LAN IP,而只能通过$_SERVER['REMOTE_ADDR']元素获取WAN IP。
如果请求是内部的(例如发送到同一局域网上的HTTP服务器),则$_SERVER['REMOTE_ADDR']元素将保留发出请求的计算机的LAN IP。
简而言之,服务器只知道发送请求的设备的IP,无论该IP属于局域网、广域网还是其他任何类型的网络。

0

我使用whatismyip.com来获取IP地址。虽然我不会在生产环境中使用它,但我会在集成测试中使用它(特别是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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接