检查计算机是否已打开

时间:2012-06-07 13:47:52

标签: php windows remote-access remote-management

我写了一个简单的php页面,它发送了几个运行Windows 7的计算机上的wake-on-lan数据包。

如何检查计算机是否已开启(假设互联网在该位置工作)?

我可以在加载页面时如何ping计算机以检查响应吗?

附加信息:这些计算机都位于不同的位置,在这些位置,它们具有针对IP的动态DNS设置,并且都在与其他计算机的路由器之后。

2 个答案:

答案 0 :(得分:4)

  

我可以通过Windows RDC远程桌面所有计算机,我为它们打开端口3389以及单独的WOL端口,因此它们有两个开放端口

然后尝试打开远程桌面会话?

<?php
$timeout = 10;
$socket = @fsockopen( 'ip-of-the-client', 3389, $errno, $errstr, $timeout );
$online = ( $socket !== false );

var_dump( $online );

代码中的@是因为当无法建立连接时,fsockopen将抛出PHP警告。

编辑:为了清楚起见; 3389是用于创建远程桌面连接的默认端口。

答案 1 :(得分:0)

关于这个:

  

我可以通过Windows RDC远程桌面所有计算机,我为它们打开端口3389以及单独的WOL端口,因此它们有两个开放端口。

你最好的选择(除了可以阻止的ICMP ping)因为RDP打开可能是打开一个TCP套接字到端口3389,这将确认计算机在线并完全启动(即RDP服务)正在运行。)

只需使用fsockopen,就像这样:

function ServiceOnline($ip, $port = 3389) {
    $rdp_sock = @fsockopen($ip, $port, null, null, 5); // 5 sec timeout so that it doesn't hang for a whole minute if not available
    if (!$rdp_sock) {
        return false;
    } else {
        fclose($rdp_sock);
        return true;
    }
}

如果其他服务可用作后备,您也可以使用此代码,例如,通过传递$port参数。