我写了一个简单的php页面,它发送了几个运行Windows 7的计算机上的wake-on-lan数据包。
如何检查计算机是否已开启(假设互联网在该位置工作)?
我可以在加载页面时如何ping计算机以检查响应吗?
附加信息:这些计算机都位于不同的位置,在这些位置,它们具有针对IP的动态DNS设置,并且都在与其他计算机的路由器之后。
答案 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
参数。