2016-02-26 71 views
0

我有一个网站托管在我局域网的本地服务器上。该服务器通过路由器的端口转发暴露在外部。我想知道客户端是从局域网之外还是从局域网之内连接Javascript/PHP的 - 找到客户端是否在同一个网络

+0

IP检查....如果有人要访问您的网络内的网站,该人将与服务器IP共享相同的IP,任何其他连接的IP都将来自本地网络外部的连接。 – NewToJS

+0

你可以在PHP中检查'$ _SERVER ['REMOTE_ADDR']'。你应该已经知道你的服务器的IP地址,如果'REMOTE_ADDR'在同一个子网中(或者通常是私有IP地址),那么客户端是本地的。 – ROAL

回答

3

任何到您的服务器的端口转发请求将显示为源自执行端口转发的设备的IP地址。

所以,你只需要测试:

if ($_SERVER['REMOTE_ADDR'] == $the_ip_address_of_the_router_on_the_lan) 

其中$the_ip_address_of_the_router_on_the_lan192.168.0.1已知值等。

局域网上的设备(假设他们直接访问您的服务器)将使请求看起来源自他们自己的局域网IP地址。

警告:如果服务器使用主机名(例如,foo.example.com)进行访问,并使用相同的主机名内部和LAN之外,与局域网内的DNS指向该主机名到面向Internet的IP地址的路由器,那么这些请求仍然会被路由器端口转发。

+0

我使用dns主机名,但在局域网中,我在路由器中添加了一个静态DNS条目,并直接指向服务器本地地址。所以我认为它不应该由路由器转发? – dragonn