Доступ к внутреннему 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);
    }
    ?> 
Другие вопросы по тегам