Доступ к внутреннему URL при использовании внешнего URL
Я разрабатываю интерфейс, чтобы показать, какие веб-станции VNC активны, и предоставляю ссылку на этот веб-интерфейс.
Пример: Станция 1: http://192.168.1.1/ на порту 5800
Если я запускаю его в своей локальной сети, он работает нормально, так как все компьютеры находятся в этой локальной сети, мне нужен способ получить эту работу с внешнего IP.
Есть ли способ перенаправить сеанс на фрейм или что-то, что делает его локальным?
Вот тест, который я сделал, который отлично работает в локальной сети, удаленно он работает только наполовину:
$station1 = @fsockopen("192.168.1.1", 5800);
if ($station1) { echo "<a href='http://192.168.1.1:5800'>Station 1 active.</a>"; echo "<br />"; fclose($station1); } else { echo "Station 1 is inactive."; echo "<br />"; }
"fsockopen" возвращает TRUE, поскольку он выполняется "на стороне сервера", но щелчок по полученной ссылке завершается неудачно, поскольку он выполняется на "стороне клиента", например, в браузере
Есть ли способ обойти это? Есть идеи?
3 ответа
Вам нужно будет настроить переадресацию портов на вашем маршрутизаторе, и VNC будет работать на разных портах на каждой машине. Возможно, было бы целесообразно сопоставить номер порта с внутренним IP-адресом, например:
Port 5801 -> 192.168.1.1
Port 5802 -> 192.168.1.2
Port 5803 -> 192.168.1.3
etc.
если вы затем вызываете страницу извне (например, с использованием динамического IP-адреса), вам придется выяснить свой динамический IP-адрес изнутри PHP (см., например, здесь, как это сделать), а затем создать ссылку на каждый порт.
<a href="123.123.123.123:5801">Station 1 active.</a>
<a href="123.123.123.123:5802">Station 2 active.</a>
<a href="123.123.123.123:5803">Station 3 active.</a>
нет способа сделать это без привязки VNC к разным портам. Для внешнего IP-адреса существует только один IP-адрес. Внутренние IP-адреса локальной сети не имеют смысла и недоступны для вызывающего абонента извне.
Вы могли бы, возможно, сделать веб-вызов на http://www.whatismyip.com/ и очистить внешний IP-адрес, а затем использовать его... однако это работает, только если веб-сервер является тем, к которому вы обращаетесь. Если нет, то это становится сложно... и в зависимости от маршрутизации это может быть очень сложно... так что, если у каждого внутреннего IP-адреса есть свой внешний IP-адрес, тогда хорошо, это может сработать, но если нет, то вы должны контролировать, как запросы получают направляется...
Так сказать, у вас есть
192.168.1.1
192.168.1.2
192.168.1.3
и они подключены к вашему домашнему беспроводному маршрутизатору, который подключен к Интернету.... скажем, через ваш кабельный модем тогда все 3 будут иметь один и тот же IP для людей за пределами вашей сети, и на самом деле, скорее всего, ваш маршрутизатор не позволит людям перезвоните в вашу сеть. Вам необходимо настроить маршрутизатор для пересылки запросов на различные порты для перехода на конкретные внутренние IP-адреса.
Поэтому, не зная, как настроена эта маршрутизация, ответить на этот вопрос очень сложно.
Попробуйте этот код для проверки (вы получаете сообщение об ошибке, говорящее о том, что не так): также доступ к вашему WAN ip изнутри сети с помощью WAN ip для подключения к Интернету не может быть выполнен с обычными маршрутизаторами, вы должны будете определить, является ли его локальная сеть или Сеть WAN затем соответственно меняет ip (плюс направляет весь трафик WAN на сервер).
<?php
if(substr($_SERVER['SERVER_ADDR'], -3)=="1.1"){$server=$_SERVER['SERVER_ADDR'];}else{$server='123.123.YOUR.WAN123.123'}
$fp = fsockopen($server, 5800, $errno, $errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
echo "<a href='http://'.$server.':5800'>Station 1 active.</a>";
fclose($fp);
}
?>