使用外部URL时访问内部URL

时间:2011-04-08 02:11:30

标签: php vnc-server

我正在开发一个界面,以显示哪些VNC网站处于活动状态,并提供指向该网络界面的链接。

示例:第1站是:端口5800上的http://192.168.1.1

如果我在本地网络上运行它,它工作正常,因为所有计算机都在本地网络上,我需要的是一种从外部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 />";
    }

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 个答案:

答案 0 :(得分:1)

您必须在路由器中设置port forwarding,并让VNC在每台计算机上的不同端口上运行。将端口号映射到内部IP可能是最明智的,例如:

 Port 5801 -> 192.168.1.1
 Port 5802 -> 192.168.1.2
 Port 5803 -> 192.168.1.3
 etc.

如果你从外面调用页面(例如使用动态IP),你必须从PHP中找到你的动态IP(参见例如here,如何做到这一点),然后链接到每个端口。

<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地址。 LAN的内部IP没有意义,外部无法访问呼叫者。

答案 1 :(得分:0)

尝试此代码进行测试,(你得到一个错误告诉你什么是错的): 使用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);
    }
    ?> 

答案 2 :(得分:0)

你或许可以对http://www.whatismyip.com/进行网络呼叫并抓取外部IP地址然后使用它...但是只有在您正在查询的网络服务器时才能使用。如果不是它变得棘手...并且取决于路由它可能变得非常棘手...所以如果每个内部IP具有不同的外部IP然后确定它可能工作但是如果没有那么你必须控制请求如何获得路过......

所以说你有

192.168.1.1

192.168.1.2

192.168.1.3

并且它们连接到连接到互联网的家庭无线路由器....通过说你的电缆调制解调器然后所有3将与网络外的人有相同的IP,事实上很可能你的路由器不会允许大家回拨你的网络。您必须配置路由器以将请求转发到各个端口以转到特定的内部IP地址。

因此,如果不知道如何设置此路由,则回答此问题非常困难