php - 自定义服务器应用程序所需的内部 IP 地址 - PHP SERVER 变量

标签 php ip-address

我读过这篇文章:

How to get the my system's IP address

但这对我来说并没有真正解决问题的根源。我需要获取内部网络上的客户端IP,例如192.168.1.7这样我就知道是否从内部位置访问服务器。

我正在更新其他人不久前构建的一些代码,此代码片段位于其中:

$octet = explode(".", getenv("REMOTE_ADDR"), 4);

if($octet[0] != 192 && $octet[1] != 168 && $octet[2] != 1) { 
    die("You are unable to view this page from your current location."); 
}

这看起来像是在测试该内部 IP,但在另一个具有类似代码的页面上,我得到 die信息。该代码实际上显示我的 IP 不是 192.168.1.7 (这段代码实际上显示了 ISP 给我的静态 IP):

if($octet[0] != 192 && $octet[1] != 168 && $octet[2] != 1) { 
    die("You are unable to view this page from your current location: " . getenv("REMOTE_ADDR")); 
}

我有点困惑,因为这段代码似乎在过去有效,但现在不行。我不完全确定它何时停止工作,但根据我看到的代码,它一开始就不应该工作。

注意

我还应该提到,所有需要访问该服务器的客户端都是内部的(大部分)。它是一个带有自定义许可证 key 模块的 CRM。我希望这些 PHP 页面只能由 192.168.1.0 上的客户端访问。网络。但棘手的部分是,有一种方法可以使用 DNS 从外部访问 CRM 的非关键系统部分,如下所示:

crm.my-domain.com

可以这么说,那些从网络外部访问 CRM 的客户端不应该访问关键模块;仅那些 192.168.1.0 上的客户网络应该能够看到 key 。因此,如果我可以获得内部 IP,我就可以对其进行测试并显示页面。

注2

我正在网络中运行 DNS,并且我在路由器上有一个到相关服务器的端口转发,即 <internal_ip>在端口 80 .

DNS 有一条 A 记录,如下所示:

crm_servername    A    192.168.1.20

它有一个 CNAME其中:

crm    CNAME    crm_servername.my-domain.com

我需要的还不止这些还是这对我有用?目前我可以通过子域地址访问有问题的服务器,但是当我到达有问题的页面时,它仍然显示外部IP,non-192.168.1.x ...

我的问题是,如何设置我的 DNS 区域文件,以便当我在本地网络上时,当我访问 IP(例如 192.168.1.20)上的服务器时,我会留在网络中而不会被路由出去然后又回来?看起来我要从 ISP 静态 IP 出去,然后再进来,服务器也这么认为。

最佳答案

如果将此代码更改为以下内容,也许可以使代码工作得更好:

function is_local($ip) {
    $octet = explode('.', $ip);

    return ($octet[0] == '10' ||
        ($octet[0] == '172' && ((int)$octet[1] >=16 && (int)$octet[1] <= 31)) ||
        ($octet[0] == '192' && $octet[1] == '168')
    );
}

此代码将检查 IP 地址是否属于 private network 中的任何一个范围,这应该意味着您的客户端是内部的或通过 VPN 连接的。

这可能会解决您的问题,或者它可能太广泛了。如果您的 IP 显示为来自您的 ISP 的 IP,那么当您认为您在本地网络上或您正在被端口转发到内部网络时,不知何故您并不在本地网络上,因此仍然向 ISP 显示远程 IP 地址服务器。

关于php - 自定义服务器应用程序所需的内部 IP 地址 - PHP SERVER 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11696250/

相关文章:

java - 获取 DHCP IP 地址范围

php - 临时 header 仅针对我的 IP 地址显示

iPhone SDK : How to check if IP entered by user is valid?

php - 在 WHILE 语句期间删除结果

javascript - 如何在使用 PHP 单击提交按钮后删除文件之前显示警告消息

PHP session Cookie 因用户更改 IP 而失败

kubernetes - 带有主机名的 Kube 入口(如何知道 IP 以转发域名?)

php - 删除多级菜单中的子项

PHP:保持对象分离?

javascript - 来自同一类动态列表的函数