У меня есть сайт, размещенный на локальном сервере в локальной сети. Этот сервер выставляется внешним путем перенаправления портов с маршрутизатора. Я хочу знать, подключен ли клиент из-за пределов локальной сети или внутри локальной сети.Javascript/PHP - найти, если клиент находится в одной сети
ответ
Любой запрос на ваш сервер, который был перенаправлен в порт, будет отображаться исходящим от IP-адреса устройства, которое выполняло переадресацию порта.
Так что вам просто нужно тестировать:
if ($_SERVER['REMOTE_ADDR'] == $the_ip_address_of_the_router_on_the_lan)
где $the_ip_address_of_the_router_on_the_lan
является известным значением такого как 192.168.0.1
.
Устройства в локальной сети, предполагая, что они обращаются к вашему серверу напрямую, будут делать запросы, которые, по-видимому, происходят от их собственного IP-адреса локальной сети.
Предупреждение: Если сервер доступен, используя имя хоста (например, foo.example.com
), и вы используете один и тот же имя хоста как внутри, так и вне локальной сети, и DNS внутри локальной сети указывает, что имя хоста в сети Интернет сталкивается с IP-адрес маршрутизатора, то запросы все равно будут перенаправлены портами маршрутизатором.
Я использую имя DNS dns, но в локальной сети я добавляю статическую запись DNS в свой маршрутизатор с точками непосредственно на локальные адреса сервера. Так что я думаю, что он не должен быть перенаправлен маршрутизатором? – dragonn
IP check .... Если кто-то должен получить доступ к веб-сайту в вашей сети, этот человек будет использовать тот же IP-адрес, что и IP-адрес сервера, любые другие подключенные IP-адреса будут подключаться из-за пределов локальной сети. – NewToJS
Вы можете проверить '$ _SERVER ['REMOTE_ADDR']' в PHP. Вы уже должны знать IP-адрес вашего сервера, если 'REMOTE_ADDR' находится в той же подсети (или, если это частный IP-адрес), клиент является локальным. – ROAL