【问题标题】:How can i get IP address of systems in a local network which accessing the webpage from local server using php如何获取本地网络中使用 php 从本地服务器访问网页的系统的 IP 地址
【发布时间】:2012-11-07 06:04:16
【问题描述】:

我有一个通过代理服务器连接到互联网的本地网络,代理服务器 IP 地址是192.168.0.1。网络中的所有系统手动分配 IP 地址,如 192.168.0-6.1-255,子网掩码 255.255.248.0,Default gateway 192.168.0.1

我在本地网络中创建了另一台服务器用于本地访问我的网站,其 IP 地址为 192.168.0.25,子网掩码 255.255.255.0,默认网关 192.168.0.25

本地网络中的所有系统现在都可以使用该地址访问该网站

http://192.168.0.25/

我必须跟踪访问我网站的所有系统,所以我在 php 中使用了函数 $_SERVER['REMOTE_ADDR']。但是我获得的所有访问我网站的系统的 IP 地址与代理服务器 IP 地址相同(192.168.0.1)。

请帮我获取每个系统的正确 IP 地址。

【问题讨论】:

  • 我有同样的问题,你找到解决办法了吗?

标签: php lan


【解决方案1】:

试试这个

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {   //check ip from share internet
        $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'];
    }

【讨论】:

  • 要补充这一点,看看 Symfony HTTP Request 对象是如何捕获这个的。 github.com/symfony/HttpFoundation/blob/master/Request.php#L591
  • @Rishi Kalia 不,我正在从本地网络中的不同系统检查它,它们都显示相同的 ip 127.0.0.1。函数 $_SERVER['HTTP_X_FORWARDED_FOR'] 正在获取此 IP。但是如果我尝试从代理服务器访问这个页面,它会显示它自己的 IP 192.168.0.1 但是这里的函数 $_SERVER['REMOTE_ADDR'] 正在获取 IP
  • @Joseph Paul 这是您的代理服务器或更具体地说是防火墙,它为您提供了 127.0.0.1..我已经仔细检查了脚本,它正在呼应我想要的结果..
  • @Rishi Kalia 我已经关闭了防火墙但可能是因为代理服务器。但我需要一个解决方案,我无法避开代理服务器,也无法将网页放入代理服务器。两台服务器应该是分开的。请给我一个解决方案。
【解决方案2】:
function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))  
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

echo $userIP = getRealIpAddr();

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 2021-01-14
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2013-10-20
    • 2012-09-29
    相关资源
    最近更新 更多